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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吃阁子的猫 中级黑马   /  2013-9-14 10:45  /  1582 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吃阁子的猫 于 2013-9-14 21:57 编辑

public class GenericityDemo {

ArrayList<String> list3 = new ArrayList<>();
   Class clazz = list3.getClass();
  Method addMethod = clazz.getMethod("add", Object.class);   //用反射的方式给它加泛型以外的类型,这里为什么不能直接指明是String类型呢?
  addMethod.invoke(list3, 78);
  System.out.println(list1.get(0));
}

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1

查看全部评分

7 个回复

倒序浏览
Method addMethod = clazz.getMethod("add", Object.class); 这里需要输入的参数是ArrayList中定义方法时指定的参数(ArrayList的add()方法的参数为Object)。

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1

查看全部评分

回复 使用道具 举报
ArrayList<String> list3 = new ArrayList<>();//首先这风景点"="号右边尖括号里也要写泛型的,提问题也要尽量不要定错误代码,这样会影响坛友观看的.
   Class clazz = list3.getClass();
  Method addMethod = clazz.getMethod("add", Object.class);   //用反射的方式给它加泛型以外的类型,这里为什么不能直接指明是String类型呢?
  addMethod.invoke(list3, 78);                        //上面ArrayList集合中的add(E e)方法,参数是一个泛型类的对象,反射时不知道参数到底是个什么类型的东东,而且在第二行反射时会去类型化,即使第一行指定它加入的是String类型,反射后JAVA也不知道参数的类型,因此第三行反射方法时参数的类型是Object.class,第四行因为是通过反射使用的方法,所以可以向集合对象中加入任意类型的对象.\
一句话,反射会去类型化.
  System.out.println(list1.get(0));
}

评分

参与人数 1技术分 +2 收起 理由
潘才新 + 2 跟我想说的一样 0.0

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
施大勇 发表于 2013-9-14 16:59
ArrayList list3 = new ArrayList();//首先这风景点"="号右边尖括号里也要写泛型的,提问题也要尽量不要定错 ...

根据JDK1.7的新特性,右边是可以只保留尖括号,不用加泛型.后面的了解了,谢啦
回复 使用道具 举报
抽烟男孩 发表于 2013-9-14 16:31
Method addMethod = clazz.getMethod("add", Object.class); 这里需要输入的参数是ArrayList中定义方法时指 ...

谢啦谢啦谢啦
回复 使用道具 举报
吃阁子的猫 发表于 2013-9-14 21:52
根据JDK1.7的新特性,右边是可以只保留尖括号,不用加泛型.后面的了解了,谢啦 ...

刚知道1.7的新特性,学习啦
回复 使用道具 举报
施大勇 发表于 2013-9-18 15:32
刚知道1.7的新特性,学习啦

哪里哪里,互相学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马