【问题标题】:Practical example for Immutable class不可变类的实际示例
【发布时间】:2012-02-08 23:51:42
【问题描述】:

很明显,不变性增加了可重用性,因为它在每次状态更改时都会创建新对象。有人可以告诉我一个我们需要不可变类的实际场景吗?

【问题讨论】:

    标签: java immutability


    【解决方案1】:

    考虑java.lang.String。如果它不是不可变的,那么每次你有一个字符串你想确信它不会在你下面改变时,你就必须创建一个副本。

    另一个例子是集合:很高兴能够接受或返回一个真正不可变的集合(例如来自 Guava - 而不仅仅是可变集合上的不可变视图)并确信它不会被更改。

    这些是否算作“需要”,我不知道 - 但没有它们我不想开发。

    【讨论】:

    • 看来你今天达到了 400k,恭喜!
    • 谢谢 :) 到年底达到 50 万?
    • 其实我一直在寻找一种情况,我们需要实现一个不可变的类。(不是在java api中。在一个项目中)
    • @Jon 他们必须取消每日 200 的限制,这样你才能在年底成为百万富翁!
    • @esudharaka,与String 编写的代码具有相同的优势:您不必担心它会从您下面更改;线程安全保证和不变量变得更容易推理,您的生活通常不会那么痛苦。
    【解决方案2】:

    一个很好的例子与散列有关。一个类会覆盖equals()hashCode() 方法,这样它就可以在HashSet 和(作为键)HashMap 等数据结构中使用,并且哈希码通常由一些识别成员属性派生。但是,如果这些属性发生变化,那么对象的哈希码也会发生变化,因此该对象不再可用于哈希数据结构。

    【讨论】:

      【解决方案3】:

      Java 提供了一个很好的例子:String

      【讨论】:

        【解决方案4】:

        这篇文章有一个很好的颜色示例(因为颜色定义不会改变)。 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html

        【讨论】:

          猜你喜欢
          • 2015-10-21
          • 1970-01-01
          • 2019-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-18
          • 2013-08-14
          • 1970-01-01
          相关资源
          最近更新 更多