繁体   English   中英

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

[英]Creating Immutable class in Java with mutable reference

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

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

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

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

请用一个简单明了的例子来解释这个概念。

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

如果您不提供获取器,并且该实例没有从外部源传递给您的类(通常传递给构造函数),则只有您的类有权访问此组合实例。

从不存储对传递给构造函数的外部可变对象的引用

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

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

如果必须将引用类型返回给调用者,则应返回防御性副本,而不是原始实例的引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM