概述
1.获取class的方法
object.getClass() | 获取这个实例所属的class对象 |
type.class | 通过类型获取所属class对象 |
Class.forName() | 通过类路径获取class对象 |
Double.TYPE | 对应基本类型double.class,所有基本类型均可通过其包装类型的TYPE获取 |
Class.getSuperclass() | 获取父类的class对象 |
Class.getClasses() | 获取类内所有的公开的类,接口,枚举成员,以及它继承的成员(特指类) |
Class.getDeclaredClasses() | 通过类内显示声明的类,借口 |
Class.getEnclosingClass() | 获取闭包类
|
2.获取成员
getDeclaredField(String name) | 获取指定字段(公有,私有),不包括父类字段 |
getField(String name) | 获取指定字段(公有),包括父类字段 |
getDelaredFields() | 获取所有类内显示声明的字段(公有,私有),不包括父类字段 |
getFields() | 获取所有字段(公有),包括父类字段 |
getDeclaredMethod(String name, Class<?> .. paramType) | 获取指定方法(公有,私有),不包括父类方法 |
getMethod(String name, Class<?> .. paramType) | 获取指定方法(公有),包括父类方法 |
getDeclaredMethods() | 获取所有声明方法(公有,私有),不包括父类方法 |
getMethods() | 获取所有方法(公有),包括父类方法 |
3.问题:获取父类一个私有字段值,并且重新赋值
突破点,父类私有字段的get,set方法一般均为公有,从方法入手。
PropertyDescriptor pd = new PropertyDescriptor(fieldName, object.getClass());
Method getMethod = pd.getReadMethod();
Method setMethod = pd.getWriteMethod();
Class<T> type = getMethod.getPropertyType();//可根据判断类型另作处理
T field = getMethod.invoke();
T fieldNew = value;
setMethod.invoke(object,fieldNew);
注意:私有域调用之前必须执行,field.setAccessible(true) 或者 method.setAccessible(true)
官方API文档
最后
以上就是虚心学姐为你收集整理的Java 反射机制 父类私有字段处理的全部内容,希望文章能够帮你解决Java 反射机制 父类私有字段处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复