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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯领峰 中级黑马   /  2016-3-21 10:05  /  933 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。我觉得这个题目没什么意义啊,既然已经范定加入的数据类型为Integer类型,那还往里加String类型干嘛,不知道怎么下键盘啊

10 个回复

倒序浏览
后面如果类型输入错误,会报错~
回复 使用道具 举报
lijiy09 发表于 2016-3-21 15:46
后面如果类型输入错误,会报错~

这个我知道啊,重点是题目就是要你把那个"错误"的类型给输入进去
回复 使用道具 举报
这要运用反射的知识点
回复 使用道具 举报
我当然知道,但题目要求加入string类型的对象,怎么办?
回复 使用道具 举报
冯领峰 发表于 2016-3-21 15:49
这个我知道啊,重点是题目就是要你把那个"错误"的类型给输入进去

反射看了一下,不怎么会,我还在基础班,
回复 使用道具 举报
貌似看到过这个题,不知道怎么做
回复 使用道具 举报
因为我们在实际开发中往往都是一个集合放得都是同一种元素
  所以泛型的存在是为了防止你在实际开发中向集合中插入不同的元素
泛型只是在编译的时候有效,你可以试试ArrayList集合加泛型和不加泛型他们的类类型都是一样的
所以只要用反射来操作即可,因为反射都是绕过编译操作的
例:
   ArrayList<String> list=new ArrayList<String>();
try {
        Method method=list.getClass().getMethod("add", new Class[]{Object.class});
        //因为它可以接收任何对象,所以反射Object的类类型
        method.invoke(list, new Object[]{100});
   }catch (Exception e) {
         e.printStackTrace();
   System.out.println(list);
上面中已经确定了泛型为String
这时候你插入int元素就会报错
  这时候就要找到add方法

直接用invoke向其中插入int元素 100即可
回复 使用道具 举报
编译不通过吧
回复 使用道具 举报
cuisq 中级黑马 2016-6-13 07:01:55
10#
练习练习,主要是理论知识的认知
回复 使用道具 举报
只有反射了, 慢慢学吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马