A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十字路口 中级黑马   /  2013-6-2 08:42  /  1433 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);不是已经跳过编译器了吗?

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

5 个回复

正序浏览
求大神来解答
回复 使用道具 举报
老大,问题还没解决。。弱弱的问一句:可以帮我看看吗?谢谢咯。。
回复 使用道具 举报
如果问题已经解决,再次编辑,修改主题类型为已解决,方便大家查看
否则继续追问
回复 使用道具 举报
父类引用指向子类对象,不能使用子类特有的方法   这个是多态,你想验证泛型  却犯了多态的错误。
好奇,不解???????????????

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
父类引用指向子类对象,不能使用子类特有的方法   这个是多态,你想验证泛型  却犯了多态的错误。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马