我不明白在 Java 中使类不可变的要求。以下是我无法理解的要求:
1) 如果实例字段包含对可变对象的引用,则不允许更改这些对象:
a) 不要提供修改可变对象的方法。
b) 不要共享对可变对象的引用。切勿存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。
请用一个清晰简单的例子解释这个概念。
最佳答案
Don't provide methods that modify the mutable objects
如果您不提供 getter,并且该实例不是从外部源传递给您的类(通常传递给构造函数),则只有您的类可以访问这个组合实例。
Never store references to external, mutable objects passed to the constructor
在 Java 中,甚至引用都是按值传递的,因此当将引用类型传递给类的构造函数时,您需要创建实例的副本(即,不要如果不使用传递的实例,请使用该实例的深层复制)。
create copies of your internal mutable objects when necessary to avoid returning the originals in your methods.
如果您必须向调用者返回引用类型,那么您应该返回防御性副本,而不是对原始实例的引用。
关于java - 在 Java 中使用可变引用创建不可变类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130204/