[英]how to fill a composite object using java reflection?
我有一個這樣的配置文件:
Provider Search,ConfigURL,http://myUrl
我想使用反射填充此對象
public class MyPrefrences {
public ProviderSearch ProviderSearch;
}
public class ProviderSearch {
public String ConfigURL;
}
這是我的代碼,但是我無法設置復合對象:
MyPrefrences myPrefrences = new MyPrefrences();
try {
Field field = myPrefrences.getClass().getDeclaredField(normalizedCategory);
Field field2 = field.getClass().getDeclaredField(normalizedKey);
field2.set(field, val);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
你會怎么做
a)是否所有葉子成員都是字符串?
b)我的葉子是否可以是原始的和非原始的?
providerSearch在myPreference的實例中不能為null。
MyPrefrences myPrefrences = new MyPrefrences();
try {
Field field = MyPrefrences.class.getDeclaredField("ProviderSearch");
Field field2 = ProviderSearch.class.getDeclaredField("ConfigURL");
field2.set(field.get(myPrefrences), val);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
另外,我建議:
首先,您需要傳遞想要在field.set()
設置的值的Object引用。
其次:field.getClass()為您提供java.lang.reflect.Field
,使用field.getType()
獲得所需的Class。 所以應該是這樣
Field field1=myPref.getClass().getDeclaredField("ProviderSearch");
Object obj=field1.getType().newInstance();
Field field2=field1.getType().getDeclaredField("ConfigURL");
field2.set(obj, "www.stackoverflow.com");
field1.set(myPref, obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.