簡體   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