本篇博客介绍的是 通过反射操作构造方法:
我们先创建一个vo类
public class Student{
public Student(String name){
}
private Student(){
}
}
接下来写一个测试类Test,来通过反射操作构造方法
public class Test{
public static void main(String[] args){
Class clazz = Student.class;
try{
//获取构造方法
//getConstructor()方法,只能获取访问权限为public的,该方法参数为调用方法参数的类类型
Constructor constructor = clazz.getConstructor(String.class);
//忽略访问权限获取构造方法,调用的构造方法没有参数列表则这里不写参数;
constructor = clazz.getDeclaredConstructor();
//这里这个数组中,包含着所有访问权限为public的构造方法
Constructor[] constructors = clazz.getConstructors();
//这里获取的是所有构造方法,忽略访问权限
constructors = clazz.getDeclaredConstructors();
//查看构造方法相关信息
//获取当前构造方法所在类
clazz = constructor.getDeclaringClass();
System.out.println(clazz);
//获取访问权限的,返回值为int,需要toString
int mod = constructor.getModifiers();
String result = Modifier.toString(mod);
System.out.println(result);
//获取构造方法名
result = constructor.getName();
System.out.println(result);
//获取参数列表类型:
Class[] types = constructor.getParameterTypes();//返回Class类的数组
//调用构造方法创建对象,注意:若调用构造方法的访问权限为private,则需要调用如下方法忽视访问权限,否则无法操作
constructor.setAccessible(true);//忽略访问权限
//newInstance()方法会使构造方法生效,可在参数列表中传入调用的构造方法所需参数,返回值为Object类
Object obj = constructor.newInstance();
//obj为一个上转型对象
System.out.println(obj instanceof Student);
} catch (Exception e) {
e.printStackTrace();
}
}
}