不可变类的示例

2023-12-04

我已经知道不可变类的定义,但我需要一些例子。


标准 API 中一些著名的不可变类:

  • java.lang.String(已经提到过)

  • 基本类型的包装类:java.lang.Integer、java.lang.Byte、java.lang.Character、java.lang.Short、java.lang.Boolean、java.lang.Long、java.lang.Double、 java.lang.Float

  • java.lang.StackTraceElement(用于构建异常堆栈跟踪)

  • 大多数枚举类是不可变的,但这实际上取决于具体情况。 (不要实现可变枚举,这有时会把你搞砸。)我认为至少标准 API 中的所有枚举类实际上都是不可变的。

  • java.math.BigInteger 和 java.math.BigDecimal (至少这些类本身的对象,子类可能会引入可变性,尽管这不是一个好主意)

  • java.io.File。请注意,这表示虚拟机外部的对象(本地系统上的文件),该对象可能存在也可能不存在,并且具有一些修改和查询该外部对象的状态的方法。但 File 对象本身保持不可变。 (java.io 中的所有其他类都是可变的。)

  • java.awt.Font - 表示用于在屏幕上绘制文本的字体(可能有一些可变子类,但这肯定没有用)

  • java.awt.BasicStroke - 用于在图形上下文上绘制线条的辅助对象

  • java.awt.Color - (至少此类的对象,某些子类可能是可变的或取决于某些外部因素(如系统颜色)),以及 java.awt.Paint 的大多数其他实现

    • java.awt.GradientPaint,
    • java.awt.LinearGradientPaint
    • java.awt.RadialGradientPaint,
    • (我不确定 java.awt.TexturePaint)
  • java.awt.Cursor - 表示鼠标光标的位图(这里也有一些子类可能是可变的或取决于外部因素)

  • java.util.Locale - 代表一个特定的地理、政治或文化区域.

  • java.util.UUID - 尽可能的全局唯一标识符

  • 虽然大多数集合都是可变的,但 java.util.Collections 类中有一些包装方法,它们返回集合的不可修改视图。如果您向它们传递一个在任何地方都不知道的集合,那么它们实际上是不可变的集合。此外,Collections.singletonMap(), .singletonList, .singleton返回不可变的单元素集合,也有不可变的空集合。

  • java.net.URL 和 java.net.URI - 表示资源(在互联网或其他地方)

  • java.net.Inet4Address 和 java.net.Inet6Address、java.net.InetSocketAddress

  • java.security.Permission 的大多数子类(表示某些操作所需的权限或授予某些代码的权限),但不是 java.security.PermissionCollection 及其子类。

  • 所有类别的java.time except DateTimeException是不可变的。子包的大部分类java.time也是一成不变的。

人们可以说原始类型也是不可变的——你不能改变 42 的值,对吗?


AccessControlContext 类是不可变类吗

AccessControlContext 没有任何变异方法。它的状态由一个 ProtectionDomains 列表(这是一个不可变的类)和一个 DomainCombiner 组成。 DomainCombiner 是一个接口,因此原则上实现可以在每次调用时执行不同的操作。

事实上,ProtectionDomain 的行为也可能取决于当前有效的策略 - 是否称这样的对象为不可变是有争议的。

和访问控制器?

没有 AccessController 类型的对象,因为这是一个最终类,没有可访问的构造函数。所有方法都是静态的。人们可以说 AccessController 既不是可变的也不是不可变的,或者两者兼而有之。

这同样适用于所有其他不能拥有对象(实例)的类,最著名的是:

  • java.lang.Void
  • java.lang.System(但这有一些可变的静态状态 -in, out, err)
  • java.lang.Math(这也是随机数生成器)
  • java.lang.reflect.Array
  • java.util.Collections 类
  • java.util.Arrays
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不可变类的示例 的相关文章

  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • Quarkus 不以编程方式选择 bean

    我试图以编程方式选择 bean 但 quarkus 不会注入 bean 并引发异常 不支持吗 public enum ReportType ONE TWO Qualifier Retention RUNTIME Target METHOD
  • GET 请求的 Spring 注解

    这两种spring GET方法有什么区别呢 哪一种是首选方法 Component Scope request Path public class TestComponent GET Path hello public String prin
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • 正则表达式在 Velocity 模板中不起作用

    我在 Test java 中尝试过这个 String regex lt s br s s gt String test1 lt br gt System out println test replaceAll regex 但是当我在速度模板
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • 神秘主义:Invoke-WebRequest 仅通过 ISE 工作

    我今天花了3个小时 不明白为什么 我有简单的脚本 user icm pass icm pair user pass url http 15672 api queues 2f ICM Payments Host 1 encodedCreds
  • 如何使用node.js在机器人中获取用户的IP地址?

    我正在用 Node js 编写一个机器人 我可以知道如何将代码插入到 console log 消息发送者的 IP 地址吗 我需要 IP 地址来执行一些自动登录 非常感谢 您可以通过以下方式从请求对象获取IP地址 request connec
  • 修复了各种系统上的 CHAR_BIT?

    我对 limit h 中的 CHAR BIT 感到困惑 我读过一些文章说宏 CHAR BIT 是为了可移植性 在代码中使用宏而不是像 8 这样的幻数 这是合理的 但是limits h来自glibc headers 它的值固定为8 如果gli
  • ValueError:使用序列设置数组元素。 scipy最小化[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 from scipy optimize import
  • 如何在 PL/SQL 中合并两个相似的数据库模式?

    数据库模式 源和目标 非常大 每个都有超过 350 个表 我的任务是以某种方式将这两个表合并为一个 数据本身 表中的内容 必须迁移 我必须小心 在合并模式之前或同时 主键没有重复条目 有没有人已经这样做过并且能够为我提供他的解决方案 或者有
  • 从返回的 PowerShell 函数将调试消息打印到控制台

    有没有办法从返回值的 PowerShell 函数将调试消息打印到控制台 Example function A output 0 Start of awesome algorithm WriteDebug Magic function tha
  • 在 xml 序列化期间将每个属性放在新行上

    假设我有一个 DOM 对象 或包含 xml 的字符串 是否可以以任何方式序列化 xml 使每个属性都出现在新行上 这是我想要的输出
  • 通过函数将指针传递给数组数组

    代码中有一个指向数组数组的指针 即 NameList 我希望将指针 NameList 中每个数组的内容一一打印出来 下面的代码无法完成该任务 请 帮助 int Data1 10 10 int Data2 20 20 int Data3 30
  • JTextField限制输入字符数量并仅接受数字

    这是我关于如何限制字符输入长度的代码 class JTextFieldLimit extends PlainDocument private int limit optional uppercase conversion private b
  • 为 Linux 构建 chromedriver

    我正在尝试从源代码构建 chromedriver 以在 Linux 的 selenium 中使用 我用这个手册https chromium googlesource com chromium src master docs linux bu
  • Git 推送到 refs/remotes/mine/master

    我正在跟踪一个远程存储库 即我有refs remotes joe master 我知道希望尽快将乔的更改放入我的存储库中 我不想使用fetch 因为他犯案时我可能不在电脑前 所以我告诉他 我可能要去购物 所以请将您的更改推送到refs re
  • 如何在浏览器最小化时使用 selenium webdriver 执行测试

    我尝试运行这个程序 它可以很好地处理代码 但是当我最小化浏览器时 会弹出错误 程序似乎无法找到该按钮 有什么我可以用来修复它的吗 帮助 import selenium from selenium import webdriver from
  • C# 中的 string.insert 不会覆盖,不是吗?

    C 中的 string insert 不会覆盖 startindex 中的字符 是吗 例如 返回值 abc Insert 2 XYZ 是 abXYZc So no http msdn microsoft com en us library
  • 如何在 flutter 中创建类似 Tinder 的堆叠卡片?

    我想在 flutter 中创建可滑动的类似 tinder 的卡片 它可以在向左或向右滑动时调用一些函数 但在 Flutter 中这样做似乎太复杂了 现在 我已经使用带有 Dismissible 的列表视图构建器实现了该功能 该功能按预期工作
  • 使用 isin() 确定应打印的内容

    现在我有两个数据框 data1 and data2 我想根据 ID 是否同时存在于 data2 和 data1 中 在名为 data1 的数据框中打印一列字符串值 我现在所做的给了我一个布尔列表 True or False如果 ID 存在于
  • Struts 2 - 适用于任何 URL 的映射操作

    我正在使用 Struts2 创建一个 Web 应用程序 但在处理任何 url 时遇到映射操作问题 在我的 struts xml 文件中 我配置了一个名称空间为 registration 的包 其中包含一些操作 其中主要的操作是 regist
  • 将颜色应用于 JButton 图像的透明区域 - 但不应用于其容器的透明区域

    我有一个使用带有透明区域的圆形 PNG 图像构造的圆形 JButton 我想用给定的颜色填充 JButton 图像的透明区域 但不是包含 JButton 的 JPanel 的不透明背景颜色 我想在 Java 中以编程方式执行此操作 而不是从
  • 在 MySQL 中仅选择偶数/奇数行[重复]

    这个问题在这里已经有答案了 我正在尝试从 MySQL 中的表中选择所有偶数或奇数行 而不使用 ID 字段 我尝试了这个 但我认为它不起作用 因为它基于 SQL Server 如何在sql server 2008中仅显示偶数行或奇数行 谢谢大
  • Javascript 会话超时并带有多个选项卡的弹出警报

    我正在使用 javascript setInterval 来检查用户空闲时间并在自动注销之前显示弹出警报 但它不适用于多个选项卡 适用于单个选项卡 以下是我的代码 localStorage removeItem idleTimeValue
  • 不可变类的示例

    我已经知道不可变类的定义 但我需要一些例子 标准 API 中一些著名的不可变类 java lang String 已经提到过 基本类型的包装类 java lang Integer java lang Byte java lang Chara