//获取类
Class<A> a= A.class;
//获取所有构造
Constructor<?>[] declaredConstructors = a.getDeclaredConstructors();
for (int i=0;i<declaredConstructors.length;i++){
//构造的修饰符
System.out.print(Modifier.toString(declaredConstructors[i].getModifiers()) +"参数:");
//获取构造的参数类型
Class<?>[] parameterTypes = declaredConstructors[i].getParameterTypes();
for (int i1 = 0; i1 < parameterTypes.length; i1++) {
System.out.print(parameterTypes[i].getName()+" ");
}
System.out.println("");
}
//单个构造
try {
Constructor<ManufacturerEntity> declaredConstructor = a.getDeclaredConstructor();
System.out.println(Modifier.toString(declaredConstructor.getModifiers()));
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
//根据条件获取构造
//设置要获取固定数类型的构造
Class[] p={String.class,String.class,String.class,String.class,String.class,DataSourceType.class};
try {
Constructor<A> declaredConstructor = a.getDeclaredConstructor(p);
System.out.print(Modifier.toString(declaredConstructor.getModifiers())+"参数:");
Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++) {
System.out.print(parameterTypes[i].getName() + "");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
//通过反射找到对应的构造方法创建实例
B b =null;
try {
Constructor<A> declaredConstructor = a.getDeclaredConstructor(p);
System.out.println();
//反射通过newInstance创建对象
b= declaredConstructor.newInstance("1", "2", "3", "4", "5", DataSourceType.NUDE);
System.out.println(manufacturerEntity.toString());
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
//通过反射调用类中的私有方法
Class[] types={String.class};
//param1:方法名;param2:参数类型数组
Method method = a.getDeclaredMethod("test", types);
method.setAccessible(true);
//param1:实例名;param2:参数
method.invoke(manufacturerEntity,"123213");
//通过反射set
Field name= a.getDeclaredField("name");
name.setAccessible(true);
name.set(manufacturerEntity,"厂家");
System.out.println(name.get(b));
java反射初
最新推荐文章于 2022-07-20 11:21:07 发布