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

我不理解用Java实现类不变的要求。以下是我无法理解的要求:

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

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

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

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

只需看看String。您不能直接修改它,对String实例所做的任何更改都会返回String的新实例。您不能仅仅通过调用String的方法来修改它的实例。

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.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值