請考慮下面的例子:數子類的防禦性複製
public final class ImmutableWrapper<T extends Number> {
private final T value;
public ImmutableWrapper(T value) {
// a subclass of Number may be mutable
// so, how to defensively copying the value?
this.value = value;
}
public T getValue() {
// the same here: how to return a copy?
return value;
}
}
爲了使這個類不可變的,我必須防守複製傳遞給構造任何可變參數,創建內部可變對象的副本公共返回方法。
這可能嗎?如果沒有,是否有任何解決方法?
你爲什麼要這麼做?在javadoc中聲明如果數字發生了變異,那麼在多線程上下文中該類的行爲是未定義的嗎? – assylias
@assylias例如,我在Guava的[Range](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html)中看到了關於傳遞可變對象的警告到javadoc中的構造函數。無論如何,這是我的最後一個選擇。 –
除非你害怕惡意代碼搞亂你的代碼,否則這是一個完全合理的選擇。 – assylias