黑马程序员技术交流社区

标题: 泛型问题 [打印本页]

作者: 冯领峰    时间: 2016-3-21 10:05
标题: 泛型问题
  ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。我觉得这个题目没什么意义啊,既然已经范定加入的数据类型为Integer类型,那还往里加String类型干嘛,不知道怎么下键盘啊

作者: lijiy09    时间: 2016-3-21 15:46
后面如果类型输入错误,会报错~
作者: 冯领峰    时间: 2016-3-21 15:49
lijiy09 发表于 2016-3-21 15:46
后面如果类型输入错误,会报错~

这个我知道啊,重点是题目就是要你把那个"错误"的类型给输入进去
作者: 唐玄玄    时间: 2016-3-21 19:13
这要运用反射的知识点
作者: 冯领峰    时间: 2016-4-28 01:02
我当然知道,但题目要求加入string类型的对象,怎么办?
作者: 冯领峰    时间: 2016-4-28 01:03
冯领峰 发表于 2016-3-21 15:49
这个我知道啊,重点是题目就是要你把那个"错误"的类型给输入进去

反射看了一下,不怎么会,我还在基础班,
作者: EvanDevil    时间: 2016-4-28 08:19
貌似看到过这个题,不知道怎么做
作者: 向尧    时间: 2016-5-2 17:08
因为我们在实际开发中往往都是一个集合放得都是同一种元素
  所以泛型的存在是为了防止你在实际开发中向集合中插入不同的元素
泛型只是在编译的时候有效,你可以试试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即可
作者: jannnonx    时间: 2016-6-12 23:50
编译不通过吧
作者: cuisq    时间: 2016-6-13 07:01
练习练习,主要是理论知识的认知
作者: haojingwei310    时间: 2016-6-13 21:38
只有反射了, 慢慢学吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2