はのは、次のスニペットJavaコンストラクタで参照型を常にクローンするのは良い方法ですか?
public class A {
private String[] a;
public A(String[] a) { this.a = a; }
@Override public void foo() { System.out.println(a[0]); }
}
と、次の使用を考えてみましょう:
String[] t = {"bar", "foo"};
A x = new A(t);
x.foo(); // prints "bar"
t[0] = "foo";
x.foo(); // prints "foo"
x
が、すべてでは変更されませんでした。
したがって、コンストラクタで常に参照型を常に複製することをお勧めしますか?型が複製可能でない場合はどうなりますか?
いいえ、参照型を常に*クローン化するのは良い方法ではありません。もしあなたが不変な参照型(例えば 'String')を持っていれば、それは完全に不必要であり、パフォーマンスのために悪いです。 – Jesper
はい、ありません。あなたがクラスの一つのインスタンスを複数の他のクラスを通して共有したいと想像してみましょう。このインスタンスで1つの値を変更した場合は、他の参照の値も変更する必要があります。 – SomeJavaGuy
20年以内にプロダクションコードで 'clone()'を使ったことがありません。 – EJP