我试图将所有东西放在一起定义“不变性”。
项目 (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/