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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Friendy89 中级黑马   /  2013-8-22 09:44  /  1492 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码

6 个回复

倒序浏览
syso(coll2.getClass.getMethod("get",int.class).invoke(coll2,0));
既然编译器报错 那么就绕开编译器去get到下标为0的对象
但是注意这里要写int.class,因为ArrayList.get方法接收的参数就是Int 你要是填Object那就会出现找不到方法异常.
回复 使用道具 举报
白堇翎 发表于 2013-8-22 11:12
syso(coll2.getClass.getMethod("get",int.class).invoke(coll2,0));
既然编译器报错 那么就绕开编译器去ge ...

哥们,你这好像是获取集合中角标为0的元素吧,我是想在String类型的集合中添加一个Integer类型的元素
回复 使用道具 举报
Friendy89 发表于 2013-8-22 11:34
哥们,你这好像是获取集合中角标为0的元素吧,我是想在String类型的集合中添加一个Integer类型的元素 ...

实际上你已经添加进去了.不信你直接syso(coll2).
只是你获取元素的方式不对 我告诉你了一种正确的获取方法
回复 使用道具 举报
白堇翎 发表于 2013-8-22 12:05
实际上你已经添加进去了.不信你直接syso(coll2).
只是你获取元素的方式不对 我告诉你了一种正确的获取方 ...

谢了,你的方法明白了,但是还有一个问题为什么往Integer类型的集合中添加String类型元素可以用我那种方法取出元素,而往String类型的集合中添加Integer类型元素就不可以用我那种方法取了呢
回复 使用道具 举报
本帖最后由 白堇翎 于 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






回复 使用道具 举报
白堇翎 发表于 2013-8-22 14:40
这个问题我回答不了了..但是我搜索了一下 发现这个帖子里有相关回答
http://bbs.csdn.net/topics/39030220 ...

哥们,你辛苦了,虽然你说的那个帖子里的回答我看不懂,但是还是要谢谢你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马