作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个类似下面的 java 类:
public class TopNode {
public Child1 c1;
public Child2 c2;
public static class Child1 {
public String s1;
public String s2;
}
public static class Child2 {
public String s3;
public String s4;
}
}
这个类用于使用 Gson 读取 JSON 响应。如下所示:
static Class<?> readJson(Class<?> obj) throws Exception {
Gson gson = new Gson();
.....
.....
return gson.fromJson(json, obj.getClass());
}
我正在使用上述方法读取 json 响应并将其存储到对象中。
TN_CONFIG
从这个对象,我试图访问内部类字段及其值,但只得到空值。示例:
....
....
Field f = TN_CONFIG.getClass().getDeclaredField("c1")
.getType().getDeclaredField("s1");
System.out.println("S1: " + f.get(new TopNode.Child1());
....
有人可以帮我找出哪里出错了吗?
最佳答案
我认为你的反射代码有问题。您从新的“空”Child1 中获取值(value) 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);
关于Java反射读取内部类值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937169/
我是一名优秀的程序员,十分优秀!