本帖最后由 刘张朋 于 2013-8-18 15:02 编辑
在学到通过反射获取结合的add方法,可绕过泛型的限制的,张老师用下面的方式成功绕过了你泛型
ArrayList<Integer> collections1 = new ArrayList<Integer>();
collections1.getClass().getMethod("add",Object.class).invoke(collections1,"aaa");
System.out.println(collections.get(0));//可获得正确的输出
但是我在练习的时候,有意把泛型Integer换成了String
ArrayList<String> collections2 = new ArrayList<String>();
collections2.getClass().getMethod("add",Object.class).invoke(collections2,111);
System.out.println(collections2.get(0));//在取出的时候就发生了异常
但是如果用反射的方式得到get方法并运行的话是正常的
collections2.getClass().getMethod("get", int.class).invoke(collections2, 0);
我想问的是为什么将String类型的对象通过反射添加到实际类型为Integer的集合中后能直接通过get方法取出,
但是将Integer类型的对象通过反射添加到实际类型为String的集合中后不能直接用get方法取出呢?
|