簡體   English   中英

如何使用Java反射填充復合對象?

[英]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);
}

另外,我建議:

  • 不要使用公共領域。
  • 使用以小寫字母開頭的變量。
  • 使用getter和setter。

首先,您需要傳遞想要在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM