gpt4 book ai didi

Java反射读取内部类值

转载 作者:行者123 更新时间:2023-11-29 06:48:24 25 4
gpt4 key购买 nike

我创建了一个类似下面的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com