java - Java 中的不变性

标签 java immutability

我试图将所有东西放在一起定义“不变性”

项目 (3) here是说,作为创建不可变对象(immutable对象)的规则之一,

Dont allow subclasses to override methods. The simplest way to do this is to declare the class as final. ...

覆盖的方法在子类的实例上运行。 而且,据我所知,一个不可变的类是其中一个对象,一旦它们被实例化就被“雕刻”在内存中—— 没有它的成员,因此不能更改对象。

将这些放在一起——“不可变”的定义是否适用于类和对象?通过完成方法,我可以防止在类被扩展时重写它的方法。我看不出完成不可变类的方法如何进一步增加其对象的不可变性。

最佳答案

如果您将类记录为不可变的,则此类的用户可以安全地假定此类的任何实例都是不可变的。

问题是,如果您允许您的类被子类化,则没有什么可以禁止子类添加可变状态和方法,甚至可以覆盖方法并使它们改变这个新状态。因此,类的用户所做的假设不成立。将类(class)设置为 final 使这成为不可能。

关于java - Java 中的不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132979/

相关文章:

Java Deflater 策略 - DEFAULT_STRATEGY、FILTERED 和 HUFFMAN_ONLY

pointers - clojure中的指针循环

java - 包含点的 Java arrayList 的最大大小

python - 元组与字符串与卡住集。不可变对象(immutable对象)和内存中的副本数量

programming-languages - SML: "Behind the scenes"不可变变量?

javascript - 对象的变化是一成不变的吗?

javascript - 只需使用 Immutable.js 将对象分配给变量即可克隆新对象

java - 旋转图集区域 Libgdx

java - Java InetSocketAddress 类似于 .toString()?

java - Hibernate集和多对多索引列问题