我没有理解在Java中使类不可变的要求。以下是我无法理解的要求:
1)如果实例字段包含对可变对象的引用,则不允许更改这些对象:
a)不要提供修改可变对象的方法。
b)不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。
请用一个清晰简单的例子解释这个概念。
答案 0 :(得分:2)
不要提供修改可变对象的方法
如果您没有提供getter,并且此实例未从外部源(通常传递给构造函数)传递给您的类,那么只有您的类可以访问此撰写的实例。
永远不要存储对传递给它的外部可变对象的引用 构造
在Java中,甚至引用都是按值传递,因此当引用类型传递给类的构造函数时,您需要制作实例的副本(即,don&# 39;使用传递的实例,使用实例的深层拷贝。
在必要时创建内部可变对象的副本以避免 在你的方法中返回原件。
如果您必须将参考类型返回给您的来电者,那么您应该返回防御性副本而不是对原始实例的引用。