首先:由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据。
现在我定义两个泛型的ArrayList:ArrayList<String> collection2=new ArrayList<String>();
ArrayList<Integer> collection3=new ArrayList<Integer>();
对collection2执行以下语句:
collection2.getClass().getMethod("add", Object.class).invoke(collection2,12);
System.out.println(collection2.get(0));
对collection3执行以下语句:
collection3.getClass().getMethod("add", Object.class).invoke(collection3,12);
System.out.println(collection3.get(0));
问题来了:为什么collection3执行时能够输出12,但collection2执行时却会报错呢?
|
|