黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 思绪    时间: 2014-3-21 18:24
标题: 反射问题
  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. }
复制代码

为什么?
作者: 郭黎明    时间: 2014-3-21 21:52
因为你的 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>()就可以不需要转换。




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