public class TestReflect {
public static void main(String[] args) throws Exception{
A a = new A();
Class<?> classType = a.getClass();
Field[] fields = classType.getDeclaredFields();
for(Field f : fields){
f.setAccessible(true);
f.set(a, "LiSi");
f.set(a,23);
System.out.println(f.get(a));
}
}
}
class A{
private String name = "ZhangSan";
private int age = 23;
}A类里面有两个成员变量,如何改变这两个成员变量的值,并且得到这两个值,Method可以根据方法的参数,但是成员变量怎么办呢?在线等

解决方案 »

  1.   

    这两个成员变量要有get和set方法
    下面有个例子你可以试一下
    package com.test.maven;import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;public class ReflectTest {
    public Object getObject()
    {
    Test t1=new Test("1","1");
    return t1;
    }

    public static String change(String src) {   
            if (src != null) {   
                StringBuffer sb = new StringBuffer(src);   
                sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));   
                return sb.toString();   
            } else {   
                return null;   
            }   
        }  

    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodException, InvocationTargetException {
    ReflectTest fst=new ReflectTest();
    Object o=null;
    o=fst.getObject();
    Class clazz = o.getClass();
    Field[] fields = clazz.getDeclaredFields();//所有属性
    for (Field field : fields) {
       System.out.print(field.getName()+"  =  ");
       Method mth=clazz.getMethod("get"+change(field.getName()), null);
       Object value=mth.invoke(o, null);
       System.out.println(value);
    }
    }
    }
    Test.java
    package com.test.maven;public class Test {
    private String name;
    private String age;

    public Test(String name, String age) {
    super();
    this.name = name;
    this.age = age;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAge() {
    return age;
    }
    public void setAge(String age) {
    this.age = age;
    }


    }
      

  2.   

    Method mth=clazz.getMethod("get"+change(field.getName()), null);
    Object value=mth.invoke(o, null);
    这两句话是执行get方法
    set方法与之类似
      

  3.   

    楼上正解
    public class ReflectTest {
    public static void main(String[] args) throws IllegalArgumentException,
    IllegalAccessException {
    Test test = new Test();
    Class<?> class1 = test.getClass();
    Field[] declaredFields = class1.getDeclaredFields(); for (Field field : declaredFields) {
    if (field.getType().equals(int.class)) {
    field.setAccessible(true);
    field.setInt(test, 11);
    }
    } System.out.println(test.toString());
    }
    }public class Test {
    private String name;
    private int age; @Override
    public String toString() {
    return age + "";
    }}
      

  4.   

    不用得到所有的属性,只需得到你要改的熟悉就可以了。用getDeclaredField(属性名);
    然后再修改