黑马程序员技术交流社区

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

作者: 吃阁子的猫    时间: 2013-9-14 10:45
标题: 泛型的问题
本帖最后由 吃阁子的猫 于 2013-9-14 21:57 编辑

public class GenericityDemo {

ArrayList<String> list3 = new ArrayList<>();
   Class clazz = list3.getClass();
  Method addMethod = clazz.getMethod("add", Object.class);   //用反射的方式给它加泛型以外的类型,这里为什么不能直接指明是String类型呢?
  addMethod.invoke(list3, 78);
  System.out.println(list1.get(0));
}

作者: 抽烟男孩    时间: 2013-9-14 16:31
Method addMethod = clazz.getMethod("add", Object.class); 这里需要输入的参数是ArrayList中定义方法时指定的参数(ArrayList的add()方法的参数为Object)。
作者: 施大勇    时间: 2013-9-14 16:59
ArrayList<String> list3 = new ArrayList<>();//首先这风景点"="号右边尖括号里也要写泛型的,提问题也要尽量不要定错误代码,这样会影响坛友观看的.
   Class clazz = list3.getClass();
  Method addMethod = clazz.getMethod("add", Object.class);   //用反射的方式给它加泛型以外的类型,这里为什么不能直接指明是String类型呢?
  addMethod.invoke(list3, 78);                        //上面ArrayList集合中的add(E e)方法,参数是一个泛型类的对象,反射时不知道参数到底是个什么类型的东东,而且在第二行反射时会去类型化,即使第一行指定它加入的是String类型,反射后JAVA也不知道参数的类型,因此第三行反射方法时参数的类型是Object.class,第四行因为是通过反射使用的方法,所以可以向集合对象中加入任意类型的对象.\
一句话,反射会去类型化.
  System.out.println(list1.get(0));
}


作者: 黄文伯    时间: 2013-9-14 19:58
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
作者: 吃阁子的猫    时间: 2013-9-14 21:52
施大勇 发表于 2013-9-14 16:59
ArrayList list3 = new ArrayList();//首先这风景点"="号右边尖括号里也要写泛型的,提问题也要尽量不要定错 ...

根据JDK1.7的新特性,右边是可以只保留尖括号,不用加泛型.后面的了解了,谢啦
作者: 吃阁子的猫    时间: 2013-9-14 21:54
抽烟男孩 发表于 2013-9-14 16:31
Method addMethod = clazz.getMethod("add", Object.class); 这里需要输入的参数是ArrayList中定义方法时指 ...

谢啦谢啦谢啦
作者: 施大勇    时间: 2013-9-18 15:32
吃阁子的猫 发表于 2013-9-14 21:52
根据JDK1.7的新特性,右边是可以只保留尖括号,不用加泛型.后面的了解了,谢啦 ...

刚知道1.7的新特性,学习啦

作者: 吃阁子的猫    时间: 2013-9-18 19:45
施大勇 发表于 2013-9-18 15:32
刚知道1.7的新特性,学习啦

哪里哪里,互相学习




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