首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java包装类不可变性文档

Java包装类不可变性文档
EN

Stack Overflow用户
提问于 2017-08-24 06:56:26
回答 2查看 76关注 0票数 3

众所周知,IntegerDoubleBoolean等类型包装器是不可变的.但是,我无法在官方API文档(如https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html )中找到这个文档。我还查看了源代码文件,但没有在评论中找到这一点。(另一方面,String源代码中的注释提到了它的不可变性。)

这是因为:

  • 它被记录在其他地方(如果是,在哪里?)
  • 这个事实太“众所周知”了,或者
  • 开发人员需要阅读包装器的实现,并确定包装器是否不可变?
EN

回答 2

Stack Overflow用户

发布于 2017-08-24 07:31:40

值得考虑的是,不变可能意味着两件事:

( a)如果你把这个值传递给某些地方,它是不能变异的。

( b) "a“,并且可以安全地在多线程环境中使用。

ad )有些类是不可变的,但不是线程安全的,它们很适合与setters/getter一起使用,并在HashMap中用作键--这些类没有变异器,所有字段都是私有的,但没有所有字段最终或易失性。

广告B)有些类是不可变的和线程安全的--这些类没有变异器,所有字段都是私有的、最终的或易失性的。

线程安全的类通常在文档中被描述为如此,甚至用名称来描述,当然,有些类可以是不可变的和/或线程安全的,但是没有严格地记录下来。例如,String类被记录为“常量”,但没有关于线程安全性的信息--只有一条神秘语句“因为字符串对象是不可变的--它们可以共享”,但我认为它的含义与其他线程的...shared不同。我们只是知道流行类的属性,但我同意这些属性应该被清楚地记录下来。不幸的是,在现实生活中,它们不是这样的。因此,要知道类是否是不可变的,唯一的方法就是检查文档,如果没有足够的信息,那么检查执行情况,并询问作者是否计划在将来使类变。在实践中,这个主题在一本书中得到了考虑,作者建议使用两个注释来表示某些东西是@ThreadSafe和/或@Immutable,但不幸的是,这还不是一个常见的实践。

票数 1
EN

Stack Overflow用户

发布于 2017-08-24 07:12:56

装箱包装是“不可变的”,因为它们在语法上与它们包装的文字类型实际上是可互换的。例如,boolean是不可变的:

代码语言:javascript
复制
boolean x = false;
x.flip();  // not implemented

在大多数编程语言中,本机类型是不可变的。因此,根据包装契约,

代码语言:javascript
复制
Boolean x = false;
x.mutate(/* ??? */);

也没有定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45854892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档