gpt4 book ai didi

java - Java 包装类的不可变性文档

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:49:40 27 4
gpt4 key购买 nike

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

这是因为:
- 它在别处记录(如果是,在哪里?),
——这个事实太“有名”了,还是
- 开发人员应该阅读包装器的实现并弄清楚包装器是否不可变?

最佳答案

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

a) 如果你在某个地方传递这个值,它就不能被改变。

b) "a"并且可以在多线程环境中安全使用

ad A) 有些类只是不可变的但不是线程安全的,它们很适合与 setter/getter 一起使用并作为 HashMap 中的键 - 这些类没有修改器,所有字段都是私有(private)的但没有所有字段都是最终的或不稳定。

ad B) 有些类是不可变的和线程安全的 - 这些类没有修改器并且所有字段都是私有(private)的和最终的或易变的。

线程安全的类通常在文档中或什至按名称描述,当然有些类可以是不可变的和/或线程安全的,但没有严格记录。例如 String 类被记录为“常量”,但没有关于线程安全的信息——只有一个神秘的声明“因为 String 对象是不可变的,所以它们可以共享”,但我认为它意味着不同于...与其他线程共享的东西。我们只知道流行类的属性,但我同意应该清楚地记录这些属性。不幸的是,在现实生活中他们不是。所以知道类是否不可变的唯一方法是检查文档,如果没有足够的信息,然后检查实现并询问作者他是否计划在将来使类可变。这个主题在 Java Concurrency in Practice 一书中被考虑过,作者建议使用两个注释来表示某些东西是 @ThreadSafe 和/或 @Immutable 但不幸的是这是' 一种常见的做法。

关于java - Java 包装类的不可变性文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com