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()
添加回答
举报