【发布时间】:2012-02-08 23:51:42
【问题描述】:
很明显,不变性增加了可重用性,因为它在每次状态更改时都会创建新对象。有人可以告诉我一个我们需要不可变类的实际场景吗?
【问题讨论】:
标签: java immutability
很明显,不变性增加了可重用性,因为它在每次状态更改时都会创建新对象。有人可以告诉我一个我们需要不可变类的实际场景吗?
【问题讨论】:
标签: java immutability
考虑java.lang.String。如果它不是不可变的,那么每次你有一个字符串你想确信它不会在你下面改变时,你就必须创建一个副本。
另一个例子是集合:很高兴能够接受或返回一个真正不可变的集合(例如来自 Guava - 而不仅仅是可变集合上的不可变视图)并确信它不会被更改。
这些是否算作“需要”,我不知道 - 但没有它们我不想开发。
【讨论】:
String 编写的代码具有相同的优势:您不必担心它会从您下面更改;线程安全保证和不变量变得更容易推理,您的生活通常不会那么痛苦。
一个很好的例子与散列有关。一个类会覆盖equals() 和hashCode() 方法,这样它就可以在HashSet 和(作为键)HashMap 等数据结构中使用,并且哈希码通常由一些识别成员属性派生。但是,如果这些属性发生变化,那么对象的哈希码也会发生变化,因此该对象不再可用于哈希数据结构。
【讨论】:
Java 提供了一个很好的例子:String。
【讨论】:
这篇文章有一个很好的颜色示例(因为颜色定义不会改变)。 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html
【讨论】: