本帖最后由 衣带赞 于 2013-11-21 14:48 编辑
因为集合的泛型只作用于编译时期,所以可以通过 .class 文件的反射方式往ArrayList<E>中加入不是<E>的类型参数,但是这里出了个小问题,大家帮忙看看。- package cn.itcast.day2;
- import java.util.ArrayList;
- public class MethodTest {
- public static void main(String[] args) throws Exception{
-
- ArrayList<Integer> al1 = new ArrayList<Integer>();
- ArrayList<String> al2 = new ArrayList<String>();
-
- al1.add(123);
- al2.add("abc");
-
- al1.getClass().getMethod("add", Object.class).invoke(al1, "gg");
- System.out.println(al1);
- System.out.println(al1.get(1));
-
- al2.getClass().getMethod("add", Object.class).invoke(al2,888);
- System.out.println(al2);
- System.out.println(al2.get(1));
- }
- }
复制代码 这个运行的结果是- [123, gg]
- gg
- [abc, 888]
- Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- at cn.itcast.day2.MethodTest.main(MethodTest.java:21)
复制代码 System.out.println(al2.get(1));
这句话执行错误了,而且从打印集合的结果来看,明显已经把888加入了al2中,但是无法打印出来,这是什么原因?
|