使用可变引用

时间:2016-03-21 11:46:55

标签: java class reference immutability mutable

我没有理解在Java中使类不可变的要求。以下是我无法理解的要求:

1)如果实例字段包含对可变对象的引用,则不允许更改这些对象:

a)不要提供修改可变对象的方法。

b)不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。

请用一个清晰​​简单的例子解释这个概念。

1 个答案:

答案 0 :(得分:2)

  

不要提供修改可变对象的方法

如果您没有提供getter,并且此实例未从外部源(通常传递给构造函数)传递给您的类,那么只有您的类可以访问此撰写的实例。

  

永远不要存储对传递给它的外部可变对象的引用   构造

在Java中,甚至引用都是按值传递,因此当引用类型传递给类的构造函数时,您需要制作实例的副本(即,don&# 39;使用传递的实例,使用实例的深层拷贝

  

在必要时创建内部可变对象的副本以避免   在你的方法中返回原件。

如果您必须将参考类型返回给您的来电者,那么您应该返回防御性副本而不是对原始实例的引用。