[英]Immutable class while using a cache
在通过JCIP
时,我遇到了以下被认为是Immutable
的代码片段。 然而,提供的解释让我感到困惑。
如果没有构造函数和 getter 中的 copyOf 调用,OneValueCache 就不会是不可变的。 Arrays.copyOf 为方便起见在 Java 6 中添加; 克隆也可以。
state vars
OneValueCache
不是Immutable
的,而final
和BigInteger
本身是immutable
的吗? 如果 OneValueCache 的OneValueCache
已经是Immutable
,为什么我们需要Arrays.copyOf
?
class OneValueCache {
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;
public OneValueCache(BigInteger i,
BigInteger[] factors) {
lastNumber = i;
lastFactors = Arrays.copyOf(factors, factors.length);
}
public BigInteger[] getFactors(BigInteger i) {
if (lastNumber == null || !lastNumber.equals(i))
return null;
else
return Arrays.copyOf(lastFactors, lastFactors.length);
}
}
final
适用于lastFactors
,但不适用于lastFactors
的元素。 如果方法直接返回lastFactors
而不复制它,调用者可以毫无问题地修改lastFactors
的元素,改变 OneValueCache 的内部OneValueCache
。 通过复制操作,返回的 arrays 是最终变量的副本,任何修改都会修改数组的副本,而不是不可变的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.