黑马程序员技术交流社区

标题: 泛型疑惑 [打印本页]

作者: 夏晓彤    时间: 2013-3-7 18:27
标题: 泛型疑惑
本帖最后由 夏晓彤 于 2013-3-7 21:22 编辑

集合上加上泛型,很好理解,ArrayList<Integer> collection2 = new ArrayList<Integer>();集合中存储的数据类型是Intege类型,
Class<String> clazz,这怎么理解,有什么用啊
大家自己看这是Class类型变量,不是类,楼下的都没仔细看


作者: 杜超    时间: 2013-3-7 18:44
Class<String> clazz 这个是在类上定义泛型,意思是类里面的成员函数也要定义成string类型的泛型。
class <String> Student
{
        public static <String>void method()
        {
       
        System.out.println(obj);
        }
}
作者: 王亚东    时间: 2013-3-7 18:47
Class<String> clazz
表示,clazz这个变量只能接受一个String类型的字节码对象
作者: 夏晓彤    时间: 2013-3-7 21:21
杜超 发表于 2013-3-7 18:44
Class clazz 这个是在类上定义泛型,意思是类里面的成员函数也要定义成string类型的泛型。
class  Student  ...

这是Class对象,不是类,Class大写的,而且定义在类上不是这么写的Class<String> clazz ,泛型加在类名后
作者: 夏晓彤    时间: 2013-3-7 21:26
王亚东 发表于 2013-3-7 18:47
Class clazz
表示,clazz这个变量只能接受一个String类型的字节码对象

那这么说clazz只可以是String.class了?
作者: 王亚东    时间: 2013-3-7 23:21
夏晓彤 发表于 2013-3-7 21:26
那这么说clazz只可以是String.class了?

应该和List<String>泛型一样,这个list中只能放String
作者: 杜超    时间: 2013-3-7 23:41
夏晓彤 发表于 2013-3-7 21:21
这是Class对象,不是类,Class大写的,而且定义在类上不是这么写的Class clazz ,泛型加在类名后 ...

看错了,习惯吧class当做了类来看,还以为是泛型定义在类上呢,这和Student<String> stu一样的,stu只能为String类型的
作者: 夏晓彤    时间: 2013-3-8 01:19
杜超 发表于 2013-3-7 23:41
看错了,习惯吧class当做了类来看,还以为是泛型定义在类上呢,这和Student stu一样的,stu只能为String类 ...

stu是Student类型好吧
作者: 夏晓彤    时间: 2013-3-8 01:22
王亚东 发表于 2013-3-7 23:21
应该和List泛型一样,这个list中只能放String

怎么又说道list上去了String类型的字节码对象不就一个吗
作者: 王亚东    时间: 2013-3-8 09:03
夏晓彤 发表于 2013-3-8 01:22
怎么又说道list上去了String类型的字节码对象不就一个吗

List<String> list 中只能放String对象,
Class<String> clazz只能接受String字节码对象。
作者: 杜超    时间: 2013-3-8 09:17
夏晓彤 发表于 2013-3-8 01:19
stu是Student类型好吧

stu是Student的引用变量,是指向堆内存中具体对象的引用,因为stu还没有具体的对象或属性,Student 才是一个类型,应该属于学生类型的,stu相当于一个未知数,怎么会是Student的类型呢
作者: 克零岚    时间: 2013-3-8 13:54
问题真真的挺好的,没给具体的代码,但愿我的回答是你想要的
在以前的 JDK 中,Class.newInstance() 方法的定义返回 Object,你很可能要将该返回类型强制转换为另一种类型:
  1. class Class {
  2.      Object newInstance();
  3. }
复制代码
但是使用泛型,你定义 Class.newInstance() 方法具有一个更加特定的返回类型:
  1. class Class<T> {
  2.      T newInstance();
  3. }
复制代码
如何创建一个 Class<T> 类型的实例?就像使用非泛型代码一样,有两种方式:调用方法 Class.forName() 或者使用类常量X.class。Class.forName() 被定义为返回 Class<?>。另一方面,类常量 X.class 被定义为具有类型 Class<X>,所以 String.class 是Class<String> 类型的。
Class<String> clazz 这句代码,也就是说clazz是一个String类型的类,因为Class类的实例是一个类。
也不必要在Test.class.newInstance() 强制类型转换为 Test,即Test   t=(Test)Test.class.newInstance()





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