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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 玥夜 中级黑马   /  2014-8-26 19:12  /  1068 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 玥夜 于 2014-8-26 21:37 编辑
  1. public class Test3 {

  2.         public static void main(String[] args) throws Exception
  3.         {
  4.                 ArrayList<Integer> list = new ArrayList<Integer>();
  5.                 list.add(2);
  6.                 list.add(4);
  7.                
  8.                 Method m = list.getClass().getMethod("add", Object.class);
  9. //                Method m = list.getClass().getMethod("add", String.class);
  10.                 //为毛这样写就是错的呢。。。
  11.          m.invoke(list, "a");
  12.                 System.out.println(list);
  13.         }

  14. }
复制代码

谢谢

5 个回复

倒序浏览
list不是限定了Integer泛型了吗
回复 使用道具 举报
本帖最后由 @for 于 2014-8-26 19:43 编辑

可以看看泛型的擦除相关知识点
回复 使用道具 举报
本帖最后由 @for 于 2014-8-26 19:43 编辑

ArrayList里面的元素是对象元素,Object类型的,虽然你定义了利用泛型规定了list里的元素是Integer类型,但是由于在编译阶段生成了class文件,在class文件中这种泛型的规定被擦除(泛型擦除),里面只接受object类型的量。而用反射获得list方法method,那么method方法add参数类型也应该是Object.class类型,而不是某一具体的Object的子类型。你可以测试那段错误的代码,改成Integer.class也应该是错误的
回复 使用道具 举报
@for 发表于 2014-8-26 19:33
ArrayList里面的元素是对象元素,Object类型的,虽然你定义了利用泛型规定了list里的元素是Integer类型,但 ...

哦。。。知道了 谢谢你啊
回复 使用道具 举报
木易在他乡 发表于 2014-8-26 19:24
list不是限定了Integer泛型了吗

这个反射里面的 你可能还没有看到吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马