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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 思绪 中级黑马   /  2014-3-21 18:24  /  1198 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.lang.reflect.*;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Demo
  5. {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 List<String> list = new ArrayList<String>();
  9.                 //通过反射向集合里添加Integer类型数据
  10.                 list.getClass().getMethod("add", Object.class).invoke(list,'a');
  11.                 System.out.println(list.size());//1
  12.                 Object obj = list.get(0);
  13.                 System.out.println(obj); //1
  14.         }
  15. }
复制代码

但是
  1. import java.lang.reflect.*;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Demo
  5. {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 List<String> list = new ArrayList<String>();
  9.                 //通过反射向集合里添加Integer类型数据
  10.                 list.getClass().getMethod("add", Object.class).invoke(list,'a');
  11.                 System.out.println(list.size());//1
  12.                 //Object obj = list.get(0);
  13.                 System.out.println(list.get(0));
  14.                 //Exception in thread "main" java.lang.ClassCastException: java.lang.Character can
  15.                 //not be cast to java.lang.String
  16.         }
  17. }
复制代码

为什么?

评分

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

查看全部评分

1 个回复

倒序浏览
因为你的 List<String> list = new ArrayList<String>()中带有泛型<String>,List中方法  add(E e)也是带着泛型的,你的list.get(x)结果应该为String类型,但你因为传入的是character,所以add之后是list中的类型为Character,两者需要强制转换,因为object是任何类型的父类,所以你搞成Object obj = list.get(0),就没问题。如果你把 List<String> list = new ArrayList<String>()换为 List<Character> list = new ArrayList<Character>()就可以不需要转换。

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马