使用可变引用在Java中创建Immutable类

Creating Immutable class in Java with mutable reference

我不理解用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

在爪哇中,即使引用是按值传递的,所以当引用类型传递给类的构造函数时,您需要复制实例(即,不要使用传递的实例,使用实例的深层副本)。

create copies of your internal mutable objects when necessary to avoid
returning the originals in your methods.

如果必须向调用者返回引用类型,那么应该返回防御性副本,而不是对原始实例的引用。