配列型のプロパティに対して、さまざまな場面でcloneすべきか、っていう定石みたいなもんてありますでしょうか。
class Hoge {
int[] values; // A
public int[] getValues() { ... } // B
public void setValues(int[] a) { ... } // C, D, E
};
みたいなクラスがあるとき、
A: オブジェクトがフィールド値として保持する配列。
B: getterの戻り値となる配列。
C: setterの引数として渡される配列。
D: PropertyChangeEvent の oldValue
E: PropertyChangeEvent の newValue
の5つの場面で配列が出てきます。
・すべて、cloneした独立の配列。
・すべて、cloneしない。
・C→A、A→Bだけclone。
などなど。すべてcloneするのが隠蔽の観点からはいいんでしょうけど、cloneのコストも気になります。
sunのコーディングガイドでこうなってる、とかeffective javaでこうなってる、みたいなのありますでしょうか。