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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭坤 中级黑马   /  2012-2-18 10:15  /  1941 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭坤 于 2012-2-18 14:44 编辑

基础加强37中张老师用代码演示了运用反射往intList里插入String类型的对象,顺手在下面加了一段代码测试运用反射往strList里插入Integer类型的对象,但是报错了
贴上来跟大伙研究研究原因。

  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class GenericTest {
  4.         public static void main(String[] args) throws Exception {
  5.                 List<Integer> intList = new ArrayList<Integer>();
  6.                 List<String> strList = new ArrayList<String>();
  7.                 System.out.println(intList.getClass() == strList.getClass());
  8.                 //运用反射往intList里插入String类型的对象
  9.                 intList.getClass().getMethod("add", Object.class).invoke(intList, new String("abcd"));
  10.                 System.out.println(intList.get(0));
  11.                 //运用反射往strList里插入Integer类型的对象
  12.                 strList.getClass().getMethod("add", Object.class).invoke(strList, new Integer(2));
  13.                 System.out.println(strList.get(0));
  14.         }
  15. }
  16. -------------运行结果--------------
  17. true
  18. abcd
  19. Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
  20.         at GenericTest.main(GenericTest.java:17)
复制代码
添加了如下代码做测试
strList.isEmpty();//返回false;
strList.size();//返回1
说明是已经把值插入进去了,不是在插入的时候报错。
而是在取值的时候类型转换出错了,OMG,粗心啊粗心。问题已解决,谢谢围观,mua~

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

6 个回复

倒序浏览
围观,帮不上忙,还没学反射

评分

参与人数 1技术分 +1 收起 理由
admin + 1 有心就好!加分

查看全部评分

回复 使用道具 举报
这个错误是类型强行转换出错,当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:
    Object x = new Integer(0);
     System.out.println((String)x);
这是sun公司api中自定义的,你如果把strList.get(0)
改成strList.toString();就可以解决这问题

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
顶上去{:soso_e103:}
回复 使用道具 举报
我在学习反射时,也出现了好几次这样的情况,后来查了帮助文档才知道大概错在那里了,如果出现了类似情况,可以查一下帮助文档,找到这个异常情况再来判断哪里出错了。
回复 使用道具 举报
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
        at GenericTest.main(GenericTest.java:17)
异常意思是:类型转换异常。
API中有:
public class ClassCastExceptionextends RuntimeException当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:


     Object x = new Integer(0);
     System.out.println((String)x);

Integer 不能转成String
回复 使用道具 举报
{:soso_e179:}都是高手
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马