2016-05-11 33 views
-1

想要更改對象的內部元素的值。如何更改對象的內部元素的值

enter image description here

試過如下,但無法獲得對象的內部元件的數值。 首先爲循環提供正確的輸出。但第二個for循環給出像「CASE_INSENSITIVE_ORDER」對象的屬性,等等

公共靜態無效settingConcordion()拋出異常{

Object Collect = config.getInstance(); 
    System.out.println("*********test Please ***"+Collect); 

    Class<? extends Object> c1 = Collect.getClass(); 

     Field[] fields = c1.getDeclaredFields(); 
     for (int i = 0; i < fields.length; i++) { 
      Object name = fields[i].getName(); 
// 1st for loop works correctly 

      if (name.equals("webConfig")){ 
        System.out.println("Changes is need to be done " + name +"service"); 
       Class<? extends Object> c2 = name.getClass(); 
       Map<String, Object> map1 = new HashMap<String, Object>(); 
       fields= c2.getDeclaredFields(); 
       for (int j = 0; j < fields.length; j++){ 
        System.out.println(fields[j].getName()); 

//It gives me some properties values 
       } 

      } 
     } 

這裏是一個輸出: - 這是第一個for循環的輸出: -

INSTANCE 
testTypes 
keywordDrivenFilePath 
kdConfig 
xlsDataConfig 
webConfig 

這是第二的輸出爲環路: -

hash 
serialVersionUID 
serialPersistentFields 
CASE_INSENSITIVE_ORDER 
HASHING_SEED 
hash32 
hash32 

而我想獲取這些元素

currentTestBed 
hub 
noproxy 
password 
port 
proxy 
. 
. 
. 
etc 
+0

你可以發佈完整的輸出嗎? –

+0

如果我理解你的請求,你的代碼幾乎是一個矯枉過正的問題。你不反思改變價值觀,除非這個領域被特意實施爲一個私人領域而沒有一個設定者。 –

回答

0

的值可以通過調用使用反射制定者像下面

for (int j = 0; j < fields.length; j++){ 
    System.out.println(fields[j].getName()); 
    fields[j].setAccessible(true); 
    fields[j].set(object, anyValue); // object is that object in which you want to set value 
} 

注意設定值:類屬性的setter方法必須被別人定義它會提高例外。