2 回答

TA貢獻1818條經驗 獲得超11個贊
我認為您的反射代碼有問題。您從新的“空”Child1 中獲得價值 f.get(new TopNode.Child1())
看一下代碼:
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Child1 c1 = new Child1("value1", "value2");
TopNode node = new TopNode(c1, new Child2("value3", "value4"));
Field f = node.getClass().getDeclaredField("c1")
.getType().getDeclaredField("s1");
System.out.println("S1: " + f.get(c1));
}
輸出:
S1: value1
更新,您可以嘗試以下代碼來獲取值:
Field fieldC1 = TN_CONFIG.getClass().getDeclaredField("c1");
Object objectC1 = fieldC1.get(TN_CONFIG);
Field fieldS1 = objectC1.getClass().getDeclaredField("s1");
Object valueS1 = fieldS1.get(objectC1);
System.out.println("Value S1 = " + valueS1);

TA貢獻1784條經驗 獲得超8個贊
不確定我是否理解這個問題,但讓我們嘗試一個更簡單的示例:
class TopNode {
public Child1 c1;
public static class Child1 {
public String s1;
}
}
假設是(或任何其他具有 a 且本身具有 a 的類)TN_CONFIG的實例,首先我們需要獲取實例,如下所示TopNode c1s1c1
Field fieldC1 = TN_CONFIG.getClass().getDeclaredField("c1");
Object child1 = fieldC1.get(TN_CONFIG);
然后我們就可以獲取里面的字段值
Field fieldS1 = fieldC1.getType().getDeclaredField("s1");
Object value = fieldS1.get(child1);
Child1注意:如果不是嵌套類,這也應該有效。
注2:fieldC1.getType()可以替換為child1.getClass()
添加回答
舉報