1、方法信息获取
反射可以Class实例获取引用类型所有相关信息,包括方法信息。假设Class实例为cls,则获取方法信息如下:
- cls.getMethod(方法名,参数列表): 获取某个public方法,包括父类中的public方法
- cls.getMethods(): 获取所有public方法,包括父类中的方法
- cls.getDeclaredMethod(方法名,参数列表): 获取当前引用实例的某个方法(不包括父类)
- cls.getDeclaredMethods(): 获取当前类的所有方法(不包括父类);
获取到的方法信息使用Method实例进行存放,其包含了一个方法的所有信息,如方法名、返回值类型、参数列表类型、修饰符等等。
Method[] methods = cls.getMethods();
for(Method method : methods){
String name = method.getName();
Class returnType = method.getReturnType();
Class[] params = method.getParamterTypes();
Modifier[] modifiers = method.getModifiers();
}
2、方法调用
获取到的方法信息存放在Method实例中,通过Method实例的invoke方法便可实现方法的调用。
//实例A无参数方法method的调用
Object returnValue = method.invoke(实例A);
//实例A带参数方法method的调用
Object returnValue = method.invoke(实例A,实参列表);
3、构造函数调用
newInstance方法只能调用public访问权限的无参构造函数,为了实现构造函数的灵活调用,通过Constructor实例来存放一个构造方法的所有信息,然后通过Constructor实例的newInstance方法来实例化对象。
// 获取某个public访问权限的构造方法
Constructor constructor = cls.getConstructor(参数列表);
//获取某个构造方法
Constructor constructor = cls.getDeclaredConstructor(参数列表);
//获取所有public的构造方法
Constructor[] constructors = cls.getConstructors();
//获取所有构造方法
Constructor[] constructors = clsgetDelaredConstructors();
4、继承关系获取
- 通过Class实例的getSupperClass()可以获取引用类型的父类,而当该引用类型为Object或者是interface类型时,返回null。
- 通过Class实例的getInterfaces()可以获取引用类型直接实现的接口(不包括间接实现的接口)。当其没有直接实现接口时,返回空数组,当其本身为接口类型时,返回其直接继承的接口。
- 通过Class实例的isAssignableFrom(引用类型的Class实例)来判断向上转型是否成立。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/05/18 02:45