黑马程序员技术交流社区

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

作者: Friendy89    时间: 2013-8-22 09:44
标题: 泛型问题
本帖最后由 Friendy89 于 2013-8-22 09:47 编辑

通过反射可以往某个泛型集合中加入其它类型的数据,但是我往String类型的集合中添加Integer类型的数据为什么还会提示ClassCastException,
  1. import java.util.ArrayList;
  2. public class GenericDemo {
  3.       public static void main(String[] args) {
  4.               ArrayList<Integer> coll1 = new ArrayList<Integer>();
  5.               ArrayList<String> coll2 = new ArrayList<String>();

  6.              //通过反射的方式往coll1中存储String类型的对象。//这个没问题
  7.              coll1.getClass().getMethod("add", Object.class).invoke(coll1, "abc");
  8.              System.out.println(coll1.get(0));

  9.             //通过反射的方式往coll1中存储String类型的对象。//跟上面一样的代码为什么会出现异常
  10.             coll2.getClass().getMethod("add", Object.class).invoke(coll2, 2);
  11.            System.out.println(coll2.get(0));
  12.      }
  13. }
复制代码

作者: 白堇翎    时间: 2013-8-22 11:12
syso(coll2.getClass.getMethod("get",int.class).invoke(coll2,0));
既然编译器报错 那么就绕开编译器去get到下标为0的对象
但是注意这里要写int.class,因为ArrayList.get方法接收的参数就是Int 你要是填Object那就会出现找不到方法异常.

作者: Friendy89    时间: 2013-8-22 11:34
白堇翎 发表于 2013-8-22 11:12
syso(coll2.getClass.getMethod("get",int.class).invoke(coll2,0));
既然编译器报错 那么就绕开编译器去ge ...

哥们,你这好像是获取集合中角标为0的元素吧,我是想在String类型的集合中添加一个Integer类型的元素
作者: 白堇翎    时间: 2013-8-22 12:05
Friendy89 发表于 2013-8-22 11:34
哥们,你这好像是获取集合中角标为0的元素吧,我是想在String类型的集合中添加一个Integer类型的元素 ...

实际上你已经添加进去了.不信你直接syso(coll2).
只是你获取元素的方式不对 我告诉你了一种正确的获取方法

作者: Friendy89    时间: 2013-8-22 13:26
白堇翎 发表于 2013-8-22 12:05
实际上你已经添加进去了.不信你直接syso(coll2).
只是你获取元素的方式不对 我告诉你了一种正确的获取方 ...

谢了,你的方法明白了,但是还有一个问题为什么往Integer类型的集合中添加String类型元素可以用我那种方法取出元素,而往String类型的集合中添加Integer类型元素就不可以用我那种方法取了呢

作者: 白堇翎    时间: 2013-8-22 14:40
本帖最后由 白堇翎 于 2013-8-22 14:41 编辑
Friendy89 发表于 2013-8-22 13:26
谢了,你的方法明白了,但是还有一个问题为什么往Integer类型的集合中添加String类型元素可以用我那种方 ...

这个问题我回答不了了..但是我搜索了一下 发现这个帖子里有相关回答
http://bbs.csdn.net/topics/390302204
10楼有详细的回答

另外check的源码
http://www.oschina.net/code/explore/jdk16/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java







作者: Friendy89    时间: 2013-8-22 16:06
白堇翎 发表于 2013-8-22 14:40
这个问题我回答不了了..但是我搜索了一下 发现这个帖子里有相关回答
http://bbs.csdn.net/topics/39030220 ...

哥们,你辛苦了,虽然你说的那个帖子里的回答我看不懂,但是还是要谢谢你





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