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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yi岁⑨很乖❤ 于 2015-4-13 21:03 编辑

ArrayList<Integer> collection1 = new ArrayList<Integer>();
Method method = collection1.getClass().getMethod("add", Integer.class);
method.invoke(collection1, "abd");
System.out.println(collection1);

Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.add(java.lang.Integer)
(第二行出错)

如果改成 Method method = collection1.getClass().getMethod("add", Object.class); 就正确了。

但是我不明白为什么Integer.class就不可以呢?
Class ArrayList<E> 的add定义是:boolean add(E e)  
我在定义ArrayList的时候限定了ArrayList为Integer啊,
请求解答。。。

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1 很容易没注意到的一个问题

查看全部评分

2 个回复

倒序浏览
不会java 发表于 2014-10-2 14:51
证明你泛型学的不好.
泛型只是给编译器用的. 不会编译到class文件中.

你没有理解我的意思:
我是求教,add的参数用Integer会报错,用Object没有问题
collection1.getClass().getMethod("add", Integer.class);
回复 使用道具 举报
不会java 发表于 2014-10-2 15:04
我理解了啊, 我觉得就是你对泛型理解的不够.   泛型不会被编译到.class文件中. ...

对哦,泛型不会被编译到.class文件中,就和Integer没有关系,就不能这样写。

我知道了,谢谢你啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马