版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/88052443
目录
理论
Class的反射都是运行时候来执行的,Java中集合的泛型是为了防止错误的输入,只在编译阶段有效,绕过编译就无效了。
下面演示用反射绕过编译器,
实例
程序结构:
运行截图如下:
源码:
MethodDemo.java
package my;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class MethodDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("hello");
//list1.add(20);出错
Class c1 = list.getClass();
Class c2 = list1.getClass();
System.out.println(c1 == c2);
try {
Method m = c2.getMethod("add", Object.class);
m.invoke(list1, 1000);
}
catch(Exception e) {
e.printStackTrace();
}
System.out.println(list1.size());
System.out.println(list1);
}
}
这里c1 == c2结果返回true说明编译后结合的泛型是去泛型化的。
Java中机会的泛型,是为了防止错误的输入,只有在编译阶段有效