2016-05-11 7 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 
       } 

      } 
     } 

が出力され: - これは、ループの最初の出力であります: -

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 
} 

注意以下のような反射を利用してセッターを呼び出し経由で値を設定することができます:class属性のセッターは、それが発生します他に定義する必要があります例外。

関連する問題