张老师在将泛型的时候举了一个例子,证明用反射可以绕过泛型的约束,向集合内存放与反省定义不同的数据,
但像外取值的时候他只实验了,想List<Integer>内放入字符串的值,放入后可以成功取出打印,但我试验向List<String>中存放数字的时候,取出的代码报错。Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at GenericTest.main(GenericTest.java:21)
为什么?请指教!
代码如下:
List<String> list1=new ArrayList<String>();
List<Integer> list2=new ArrayList<Integer>();
System.out.println(list1.getClass()==list2.getClass());
list2.getClass().getMethod("add", Object.class).invoke(list2, "abc");
//List<Integer>取出字符串打印没问题,
System.out.println(list2.get(0));
list1.getClass().getMethod("add", Object.class).invoke(list1, 12);
//List<String>取值报类型转换错误。
System.out.println(list1.get(0)); |