鑑於類中聲明場的變化值: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?
注意
有沒有公共getter和setter在A
類。
爲什麼我想這樣做?
我面臨着複製和粘貼equals
和hashCode
方法測試,所以我決定寫POJO方法測試框架pojo-tester 它測試對象平等,哈希碼,干將,制定者,的toString和構造,所以你不必用手寫測試。
問題是,該庫通過newInstance()
方法創建對象(類的新實例)。之後,我想讓它們相等 - 來自基礎對象的所有字段值都應該在新創建的對象中設置。
正如您可以猜到,有問題的時候equals
方法的實現依賴於super.equals(...)
和超類領域具有隨機值(如UUID)或不公開。
有什麼辦法可以達到這個目的嗎?也許還有其他圖書館?
BTW
如果有人知道如何做到這一點,並且願意發揮,只是給公關! :)
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- reflection-impact-of-setaccessibletrue?rq = 1 – Rob
and http://stackoverflow.com/questions/1196192/how-do-i-read-a-private-field-in-java?rq=1 – Rob