2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
我認(rèn)為您的反射代碼有問(wèn)題。您從新的“空”Child1 中獲得價(jià)值 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
更新,您可以嘗試以下代碼來(lái)獲取值:
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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
不確定我是否理解這個(gè)問(wèn)題,但讓我們嘗試一個(gè)更簡(jiǎn)單的示例:
class TopNode {
public Child1 c1;
public static class Child1 {
public String s1;
}
}
假設(shè)是(或任何其他具有 a 且本身具有 a 的類(lèi))TN_CONFIG的實(shí)例,首先我們需要獲取實(shí)例,如下所示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注意:如果不是嵌套類(lèi),這也應(yīng)該有效。
注2:fieldC1.getType()可以替換為child1.getClass()
添加回答
舉報(bào)