我是靠谱客的博主 虚心学姐,最近开发中收集的这篇文章主要介绍Java 反射机制 父类私有字段处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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()

获取闭包类

public class MyClass {
    static Object o = new Object() { 
        public void m() {} 
    };
    static Class<c> = o.getClass().getEnclosingClass();//MyClass
}


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 反射机制 父类私有字段处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部