用反射获取成员变量

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开始的子字符串
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值