Field 这个类代表成员变量的抽象。
获取成员变量(只能获取public的)
// 获取成员变量(只能获取public的)
Field[] fields = aClass.getFields();
for (Field field : fields) {
logger.debug("public成员变量 {}", field);
}
结果如下
public成员变量 public java.lang.String com.nextyu.study.reflection.MyObject.address
获取所有的成员变量(包括private的)
// 获取所有的成员变量(包括private的)
Field[] declaredFields = aClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
logger.debug("所有的成员变量 {}", declaredField);
}
结果如下
所有的成员变量 private java.lang.String com.nextyu.study.reflection.MyObject.name
所有的成员变量 private java.lang.Integer com.nextyu.study.reflection.MyObject.age
所有的成员变量 public java.lang.String com.nextyu.study.reflection.MyObject.address
成员变量赋值
// 成员变量赋值
// 实例化一个对象
MyObject myObject = aClass.newInstance();
// 根据名称获取某个成员变量
Field name = aClass.getDeclaredField("name");
// 因为name成员变量为private,所以必须设置可访问为true,不然直接赋值会报IllegalAccessException
name.setAccessible(true);
// set方法需要两个参数,第一个为某个对象,第二个为需要设置的值
// 下面的方法可理解为:将上面实例化的对象myObject-->的成员变量name-->赋值为小黑
name.set(myObject, "小黑");
logger.debug("{}", myObject);
结果如下
MyObject{name='小黑', age=null}
源码地址
https://github.com/nextyu/study-source/tree/master/java-reflection
更多
微信公众号:卖字母维生(living-coding),更多教程、工具、资源分享