クラスAがあるとしましょう
public class A {
private int field1;
private String field2;
...
}
Aの新しいインスタンスを作成し、次にAの2番目のインスタンスを作成します。
A a1 = new A();
A a2 = new A();
フィールドをコピーする簡単な方法(反射またはそう)があるa2
にa1
インスタンスを割り当てずa2
にはa1
(私はインスタンスの変更参照にしたくないa1
、そのフィールドの値のみ)?なんらかの方法で手動でできることは知っていますが、フィールドが多いと実用的ではありません。
反射に何か方法があるのではないかと思っていましたか?
誰かがそれを使った経験がありますか?
考慮する必要のあることがたくさんあり、要件に応じてこれを行うことができる多くの方法があります。リフレクションを使用すると、次のようなことができます
A a1 //the original a
A a2 = new A(); //the "duplicate"
Field[] fields = A.class.getDeclaredFields();
for (Field f : fields){
f.setAccessible(true); //need that if the fields are not
//accesible i.e private fields
f.get(a1);
f.set(a2, f.get(a1));
}
a2はa1のディープコピーではありませんが、 a1の同じ参照を割り当てていることに注意してください。つまり、クラスAに次のようなクラスBのオブジェクトフィールドがある場合
class A {
B b;
}
class B {
public String myString;
}
次に、複製a2を作成した後、bオブジェクトのmyStringを変更すると、a1とa2の両方に反映されます。これは、a1とa2の両方が同じBインスタンスを参照しているために発生します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加