java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
/* * 反射获取私有的构造方法运行 * 不推荐,破坏了程序的安全性,封装性 * 暴力私有 */ 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循环不能遍历, } }