[英]Java Reflection to read inner class values
我創建了一個類似於以下內容的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());
....
有人可以幫我找到我要去哪里的地方嗎?
我認為您在反射代碼中有問題。 您從新的“空” 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);
不知道我是否理解問題,但讓我們嘗試一個更簡單的示例:
class TopNode {
public Child1 c1;
public static class Child1 {
public String s1;
}
}
假設TN_CONFIG
的實例TopNode
(或具有其他任何類c1
,其本身所具有的s1
),首先我們需要獲得c1
例如像
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.