Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改对象内部元素的值_Java_Oop_Object - Fatal编程技术网

Java 如何更改对象内部元素的值

Java 如何更改对象内部元素的值,java,oop,object,Java,Oop,Object,要更改对象内部元素的值 尝试如下,但无法获取对象的内部元素的值。 第一个for循环给出正确的输出。但第二个for循环给出了对象的属性,如“不区分大小写的顺序”等 public static void settingConcordion()引发异常{ Object Collect = config.getInstance(); System.out.println("*********test Please ***"+Collect); Class<? ex

要更改对象内部元素的值

尝试如下,但无法获取对象的内部元素的值。 第一个for循环给出正确的输出。但第二个for循环给出了对象的属性,如“不区分大小写的顺序”等

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循环的输出:-

hash
serialVersionUID
serialPersistentFields
CASE_INSENSITIVE_ORDER
HASHING_SEED
hash32
hash32
而我想获取这些元素的值

currentTestBed
hub
noproxy
password
port
proxy
.
.
.
etc

您可以通过使用反射调用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
}
for(int j=0;j

注意:必须定义class属性的setter,否则会引发异常。

您能发布完整的输出吗?如果我接受您的请求,您的代码几乎是一个滥杀滥伤。除非该字段有意实现为没有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
}