[英]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.