提问人:sid 提问时间:3/21/2016 最后编辑:sid 更新时间:3/21/2016 访问量:821
在 Java 中使用可变引用创建不可变类
Creating Immutable class in Java with mutable reference
问:
我不明白在 Java 中使类不可变的要求。以下是我无法理解的要求:
1) 如果实例字段包含对可变对象的引用,则不允许更改这些对象:
a) 不要提供修改可变对象的方法。
b) 不要共享对可变对象的引用。从不存储对传递给构造函数的外部可变对象的引用;如有必要,请创建副本,并存储对副本的引用。同样,在必要时创建内部可变对象的副本,以避免在方法中返回原始对象。
请用一个简单明了的例子来解释这个概念。
答:
2赞
TheLostMind
3/21/2016
#1
不要提供修改可变对象的方法
如果未提供 getter,并且此实例未从外部源传递给类(通常传递给构造函数),则只有您的类才能访问此组合实例。
永远不要存储对传递给 构造 函数
在 Java 中,即使是引用也是按值传递的,因此当引用类型传递给类的构造函数时,您需要创建实例的副本(即,不要使用传递的实例,使用实例的深层副本)。
必要时创建内部可变对象的副本以避免 在方法中返回原件。
如果必须将引用类型返回给调用方,则应返回防御性副本,而不是对原始实例的引用。
评论
String
String
String
String