泛型限定只保留在编译时期,编译之后就不存在了,那么用反射来获取一个带有泛型的集合,在通过集合的add方法来操作集合,为什么可以向String类型的集合内存入Integer元素,而反过来就不行了呢?
这个可以:
ArrayList<String> al1=new ArrayList<String>();
al1.getClass().getMethod("add", Object.class).invoke(al1, 6);
System.out.println(al1.get(0));
这个不可以:
ArrayList<Integer> al=new ArrayList<Integer>();
al.getClass().getMethod("add", Object.class).invoke(al, "ab");
System.out.println(al.get(0)); |