概述

反射调用.png

Class常用操作

  • 使用 newInstance() 来生成一个该类的实例。它要求该类中拥有一个无参数的构造器。
  • 使用 isInstance(Object) 来判断一个对象是否该类的实例,语法上等同于 instanceof 关键字(JIT 优化时会有差别,我会在本专栏的第二部分详细介绍)。
  • 使用 Array.newInstance(Class,int) 来构造该类型的数组。
  • 使用 getFields()/getConstructors()/getMethods() 来访问该类的成员。
  • 除了这三个之外,Class 类还提供了许多其他方法,
  • 需要注意的是,方法名中带 Declared 的不会返回父类的成员,但是会返回私有成员;而不带 Declared 的则相反。
  • 当获得了类成员之后,我们可以进一步做如下操作。
    • 使用 Constructor/Field/Method.setAccessible(true) 来绕开 Java 语言的访问限制。
    • 使用 Constructor.newInstance(Object[]) 来生成该类的实例。
    • 使用 Field.get/set(Object) 来访问字段的值。使用 Method.invoke(Object, Object[]) 来调用方法。