反射

作者: 风月寒 | 来源:发表于2021-03-18 21:09 被阅读0次
获取类的Class对象
直接通过类.class,获取其Class对象
Class manClass = Apple.class;
通过Class的forName方法
Class.forName("com.example.reflect.Apple");
通过类实例对象 getClass() 方法
Apple apple = new Apple();
Class<? extends Apple> class = apple.getClass();
获取构造方法

getConstructors() :获取当前类公有构造方法

getConstructor(Class<?>... parameterTypes):获取参数类型匹配的公有构造方法

getDeclaredConstructors():获取当前类所有构造方法,包括私有。

getDeclaredConstructor(Class<?>... parameterTypes):获取所有参数类型匹配的构造方法(公有+私有)

然后直接调用newInstance()创建实例。

获取方法

getMethods() 获取类本身及其父类所有公有方法

getMethod(String name, Class<?>... parameterTypes) 获取类本身及其父类通过方法名及参数类型指定的公有方法

getDeclaredMethods() 获取类本身所有方法

getDeclaredMethod(String name, Class<?>... parameterTypes) 通过类本身通过方法名及参数类型获取本类指定的方法,无限制

如果是私有方法,需要给与权限

xxx.setAccessible(true);

方法的调用:

Object invoke(Object obj, Object... args)

这个可以理解为跟正常的相反就好,一般我们是 对象.方法名,在反射中就是 方法名.invoke(对象)。

如果是静态方法,则如下操作:

public static ActivityThread currentActivityThread() {
    return sCurrentActivityThread;
}

Method currentActivityThreadMethod = activityThreadClazz.getDeclaredMethod("currentActivityThread");
currentActivityThreadMethod.setAccessible(true);
Object activityThreadObj = currentActivityThreadMethod.invoke(null);

静态方法在invoke中传null.

费静态方法操作如下:

            Apple apple = (Apple) appClass.newInstance();
            Constructor constructor = appClass.getConstructor(String.class,int.class,int.class);
            Apple apple1 = (Apple) constructor.newInstance("红色",10,5);
            Method method = appClass.getDeclaredMethod("toString");
            String str = (String) method.invoke(apple1);
获取成员变量

getFields() 获取类本身及其父类所有公有成员变量

getField(String name) 获取类本身及其父类指定的公有成员变量

getDeclaredFields() 获取类本身所有成员变量(私有,公有,保护)

getDeclaredField(String name) 获取类本身指定名字的成员变量

为成员变量赋值操作如下:

// 私有成员变量要赋予权限
address.setAccessible(true);
address.set(manClass.newInstance(), "重庆市");
phoneNum.set(manClass.newInstance(), 023);

相关文章

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • 镜面反射矩阵的推导

    镜面反射是以镜面作为反射平面,实物与反射物到反射平面的距离相等,实物与反射物方向相反,所以,反射矩阵由反射平面确定...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • Java互联网公司-经典面试题附答案

    基础:Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?优点:反射具有解耦性,缺点:反射属...

  • Java反射与joor反射库的使用

    java原生反射的使用 反射构造对象 反射方法 反射字段 joor反射库的使用 github:https://gi...

  • Java反射

    什么是反射? 反射的作用? 反射性能优化?

  • 反射三定律

    反射第一定律:反射可以将interface类型变量转换成反射对象 反射第二定律:反射可以将反射对象还原成inter...

  • 反射

    1.反射是什么?反射的定义,概念 2.为什么要学反射? 3.怎么使用反射?反射的使用

  • 一周岁前做好两件事,孩子就不会语言迟缓,保证口齿伶俐

    与语言发展相关的原始反射有四个:张口反射、足跖反射、抓握反射和手拉反射,每个反射的发生、发展和整合都是次第进行的,...

  • 面试官问go反射第一弹

    目录 反射概念 reflect包 反射类型(Type)和种类(Kind) 反射类型(Type)使用 反射类型对象(...

网友评论

      本文标题:反射

      本文链接:https://www.haomeiwen.com/subject/psopcltx.html