用反射获取成员变量

import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
 * 通过反射取得对象的方法
 * 1、建立一个Person普通类
 * 2、引用要反射的对象并创建该对象;
 * 3、通过Class类的getMethod方法获取setName以及getName方法
 * 4、调用Method的invok(Object(Person),方法参数)方法设置或取得成员变量
 * 5、输出
 */

class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

public class Test {
    public static void main(String args[]) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
        String attribute = "name";
        String value = "测试通过";
        Class cls = Person.class;    //反射对象
        Object obj = cls.newInstance();    //实例化一个Object类型对象
        Method setMethod = cls.getMethod("set" + initcap(attribute),String.class);    //获取setName方法,返回值为Method类型
        setMethod.invoke(obj, value); //通过invoke方法调用,返回值为Object类型
        Method getMethod = cls.getMethod("get" + initcap(attribute));    //获取getName方法,返回值为Method类型
        Object ret = getMethod.invoke(obj);    //通过invoke方法调用,返回值为Object类型
        System.out.println(ret);    //取得并输出getName方法的返回值
    }
    //开头大小写转换
    public static String initcap(String str) {
        return str.substring(0,1).toUpperCase() + str.substring(1);    //从脚标1开始的子字符串
    }
}

你可能感兴趣的:(用反射获取成员变量)