黑马程序员技术交流社区

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

作者: Friendy89    时间: 2013-8-30 22:35
标题: 泛型问题
本帖最后由 Friendy89 于 2013-8-31 08:00 编辑

往Integer类型的集合中存放String类型的元素在getMethod的参数类型那里为什么用的是Object.class,而不是String.class,
  1. import java.lang.reflect.Method;
  2. import java.util.ArrayList;
  3. public class Test04 {

  4. /**
  5. * @param args
  6. * @throws Exception
  7. * @throws SecurityException
  8. */
  9. public static void main(String[] args) throws Exception {
  10. // TODO Auto-generated method stub
  11. ArrayList<Integer> list = new ArrayList<Integer>();
  12. Method method = list.getClass().getMethod("add", Object.class);//<FONT color=red>这里用String.class为什么会错,为什么要用Object.class,依据是什么</FONT>
  13. method.invoke(list, "itcast");
  14. System.out.println(list);
  15. }

  16. }
复制代码

作者: 范龙波    时间: 2013-8-30 23:53
父类引用指向子类对象 !
作者: Friendy89    时间: 2013-8-31 00:03
范龙波 发表于 2013-8-30 23:53
父类引用指向子类对象 !

为什么用String就会错,按道理,它传进去的就是String类型的对象啊

作者: 老衲玩IT    时间: 2013-8-31 00:24
泛形只对<>里面的类型有效,父类子类都不行除非你声明为<? extends Object>,但这样就失去了泛开的意义
作者: 老衲玩IT    时间: 2013-8-31 00:38
java.lang.NoSuchMethodException: java.util.ArrayList.add(java.lang.String)
不存在ArrayList.add(String)
反射调用只能ArrayList.add(E e),E就是Object
作者: 范龙波    时间: 2013-8-31 01:24
Friendy89 发表于 2013-8-31 00:03
为什么用String就会错,按道理,它传进去的就是String类型的对象啊






作者: Friendy89    时间: 2013-8-31 01:29
范龙波 发表于 2013-8-31 01:24

原来是这样,谢了哥们,辛苦了




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