繁体   English   中英

使用缓存时不可变 class

[英]Immutable class while using a cache

在通过JCIP时,我遇到了以下被认为是Immutable的代码片段。 然而,提供的解释让我感到困惑。

如果没有构造函数和 getter 中的 copyOf 调用,OneValueCache 就不会是不可变的。 Arrays.copyOf 为方便起见在 Java 6 中添加; 克隆也可以。

state vars OneValueCache不是Immutable的,而finalBigInteger本身是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.

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