关于泛型和反射的一个问题
有如下代码片段
1 ArrayList<String> collection2 = new ArrayList<String>();
2 collection2.add("abc");
3 collection2.getClass().getMethod("add", Object.class).invoke(collection2,
4 new Integer(48));
5 Object obj=collection2.get(1);
6 System.out.println(obj.getClass().getName());
7 // System.out.println(collection2.get(1).getClass().getName());
第7行不注释掉时会出现ClassCastException,但是如果按照第5、6行这样写又可以顺利通过编译并正常显示java.lang.Integer
在此想请教各位java大神这样分开写和合着写的区别何在,以及为什么分开写就不会出现异常。
先谢谢各位大神,纠结了很久了,还是想不通 Java 泛型 ArrayList String 对象
[解决办法]
泛型定义是给编译器看的,反射会绕过泛型检查。
[解决办法]
collection2 中的第一个对象时Integer类型,而定义的泛型是String类型,它默认转为String,当然会出现cast异常了。
6.7行代码 你先向上转成object类型了,所以没问题。
[解决办法]