很明显,不变性会增加可重用性,因为它会在每个状态变化中创建新对象。有人告诉我一个我们需要不可变类的实际场景吗?
答案 0 :(得分:5)
考虑java.lang.String
。如果它不是一成不变的,那么每当你有一个你想要自信的字符串就不会在你下面改变时,你必须创建一个副本。
另一个例子是集合:很高兴能够接受或返回一个真正不可变的集合(例如来自Guava - 不仅仅是一个可变集合的不可变视图)并且相信它不会被改变。
那些是否算作“需要”,我不知道 - 但我不想在没有它们的情况下发展。
答案 1 :(得分:3)
一个很好的例子与散列有关。类会覆盖equals()
和hashCode()
方法,以便它可以在HashSet和(作为键入)HashMap等数据结构中使用,并且哈希代码通常由某些标识成员属性派生。但是,如果要更改这些属性,那么对象的哈希代码也会更改,因此该对象不再可用于散列数据结构。
答案 2 :(得分:2)
Java提供了一个很好的例子:String
。
答案 3 :(得分:0)
本文有一个很好的颜色示例(因为颜色定义不会改变)。 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html