黑马程序员技术交流社区

标题: java中关于泛型的问题 [打印本页]

作者: 十字路口    时间: 2013-6-2 08:42
标题: java中关于泛型的问题
public class GenericTest {
/**
  * @param args
  */
public static void main(String[] args) throws Exception{
ArrayList<String> collection2=new ArrayList<String>();
ArrayList<Integer> collection3=new ArrayList<Integer>();
//我们可以看到结果为true,表示编译器编译过程中会把泛型的类型去掉,这样得到的是同一份字节码
System.out.println(collection2.getClass()==collection3.getClass());
//collection3.add("abc");

//用反射跳过编译器,把不同的类型放入collection中(也就是泛型只是给编译器看到)
collection3.getClass().getMethod("add", Object.class).invoke(collection3, "abc");
System.out.println(collection3.get(0));

collection2.getClass().getMethod("add",Object.class).invoke(collection2, 2);
System.out.println(collection2.get(0));

}
}


为什么collection2.getClass().getMethod("add",Object.class).invoke(collection2, 2);
System.out.println(collection2.get(0));这段代码
会报错:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at cn.itext.day2.GenericTest.main(GenericTest.java:43);不是已经跳过编译器了吗?


作者: 刘兆华    时间: 2013-6-2 09:25
父类引用指向子类对象,不能使用子类特有的方法   这个是多态,你想验证泛型  却犯了多态的错误。
作者: 十字路口    时间: 2013-6-2 10:28
父类引用指向子类对象,不能使用子类特有的方法   这个是多态,你想验证泛型  却犯了多态的错误。
好奇,不解???????????????
作者: 曹睿翔    时间: 2013-6-2 10:32
如果问题已经解决,再次编辑,修改主题类型为已解决,方便大家查看
否则继续追问
作者: 十字路口    时间: 2013-6-2 18:48
老大,问题还没解决。。弱弱的问一句:可以帮我看看吗?谢谢咯。。
作者: 袁梦希    时间: 2013-6-12 18:32
求大神来解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2