想要更改对象内部元素的值。
尝试如下,但无法获取对象内部元素的值。 First for循环提供正确的输出。但是第二个for循环给出了像“CASE_INSENSITIVE_ORDER”等对象的属性
public static void 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
这是第二个for循环的输出: -
hash
serialVersionUID
serialPersistentFields
CASE_INSENSITIVE_ORDER
HASHING_SEED
hash32
hash32
而我想获取这些元素的值
currentTestBed
hub
noproxy
password
port
proxy
.
.
.
etc
答案 0 :(得分:0)
您可以通过使用下面的反射调用setter设置您的值
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属性的setter,否则会引发异常。