を考えると、クラス内で宣言されたフィールドの変更値:Javaリフレクション、スーパー
public class A {
private UUID uuid;
public A(){
uuid = UUID.randomUUID();
}
// equals
}
class B extends A {
private int b;
// getters, setters, equals (invokes super.equals(...))
}
class Sample {
public static void main(String[] args){
B b1 = new B(); //
B b2 = B.class.newInstance();
// now I want to take value of A.uuid from b1 and set it to b2
}
}
問題
私はB1インスタンスからuuid
フィールドの値を取得し、それを設定する方法がわかりません〜b2。 A
クラスのプライベートフィールドはB.class.getDeclaredFields()
などの方法ではアクセスできません... Javaコンパイラはこれのような合成アクセサまたはsmthを作成しますか?
NOTE
A
クラスには公共のゲッターとセッターがありません。
なぜ私はこれをしたいですか?
私は、コピーして直面し、equals
とhashCode
メソッドのテストを貼り付けるので、あなたが持っていないので、私はPOJOのメソッドのテストフレームワークpojo-tester を書くことにしたそれは、オブジェクトの平等、ハッシュコード、ゲッター、セッター、のtoStringおよびコンストラクタをテストしました。手でテストを書く。
問題は、このライブラリがnewInstance()
メソッドによってオブジェクト(クラスの新しいインスタンス)を作成することです。その後、私はそれらを同じにしたい - ベースオブジェクトからのフィールドのすべての値は、新しく作成されたオブジェクトに設定する必要があります。
equals
メソッド実装がsuper.equals(...)
に依存し、スーパークラスのフィールドに(UUIDのような)ランダムな値がある場合、または公開されていない場合に問題があります。
これを達成する方法はありますか?多分他のライブラリですか?
ところで
誰かがこれを行うと、貢献したい、ちょうどPRを送信する方法を知っていれば! :)
https://github.com/sta-szek/pojo-tester
おかげ
http://stackoverflow.com/questions/7966466/getting-first-parents-fields-via-reflection?rq=1 – Rob
を参照してくださいhttp://stackoverflow.com/questions/10638826/java-リフレクションの影響を受ける可能性がある?rq = 1 – Rob
そしてhttp://stackoverflow.com/questions/1196192/how-do-i-read-a-private-field-in-java?rq=1 – Rob