反射:Java在运行期间通过反射机制,动态地获取Class对象。 泛型:在编译期间对类型进行检查,实际上Java虚拟机没有泛型类型的对象,Java中泛型采用类型擦除的方式去实现,也就是平常所说的伪泛型。 实例:定义一个List list,使用反射在list中装载Integer对象。
List<String> list =new ArrayList<>();
list.add("abc");
Class<? extends List> c = list.getClass();
Method method=c.getMethod("add",Object.class);
method.invoke(list,123);
Object s = list.get(1);
System.out.println(s);
System.out.println(s.getClass());
原理:因为泛型的作用层在编译时,而在运行时泛型会被擦除,而反射在运行时获取到list的add方法,直接在运行时添加了数据,跳过了编译期。