java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束

时间:2023-12-22 22:44:44
/*
* 反射获取私有的构造方法运行
* 不推荐,破坏了程序的安全性,封装性
* 暴力私有
*/
public class ReflectDemo4 {
public static void main(String[] args)throws Exception {
Class c=Class.forName("demo01.Person");
Constructor con=c.getDeclaredConstructor(int.class,String.class); //Constructor类,父类AccessibleObject,定义方法setAccessibile(boolean flag)
con.setAccessible(true); Object obj=con.newInstance(18,"lisi");
System.out.println(obj);
}
}
package demo02;

import java.lang.reflect.Method;
import java.util.ArrayList; /*
* 定义集合类,泛型String
* 要求向集合中添加Integer类型
*
* 反射方式,获取出集合ArrayList类的class文件对象
* 通过class文件对象,调用add方法
*
* 对反射调用方法是否理解
*/
public class ReflectTest {
public static void main(String[] args)throws Exception {
ArrayList<String> array=new ArrayList<>();
array.add("a"); //反射方式,获取出集合ArrayList类的class文件对象
Class c=array.getClass();
//获取ArrayList.class文件中的方法add
Method method=c.getMethod("add", Object.class);
System.out.println(method);
//使用invoke运行ArrayList方法add
method.invoke(array,150);
method.invoke(array,1500);
method.invoke(array,15000);
System.out.println(array);
//增强for循环不能遍历,
}
}