考虑一下:
public abstract class AbstractHibernateDao< T extends Serializable > {
private T clazz;
}
而且:
public abstract class AbstractHibernateDao< T extends Serializable > {
private Class< T > clazz;
}
我能够编译两者 - 所以我肯定在这里做了一些基本检查。
答案 0 :(得分:11)
T clazz
我们希望某个类的实例,Class< T > clazz
,我们希望Class
的实例描述T
(类文字)。因此,我们假设T
我们会使用Integer
。在那种情况下:
clazz
将允许我们存储1
,2
等。Integer.class
。答案 1 :(得分:4)
private T clazz;
这里clazz
可以包含任何类型,类型为Serializable,甚至是自定义类对象,如果它是Serializable类型。
在这种情况下,名称表示它是一个类(clazz
),但该值必须是Class对象。
private Class< T > clazz;
这里是Class
的 Type 。 Class是一种通用类型,因此clazz只能包含类对象,其中Type为Serializable。
答案 2 :(得分:3)
第一个创建一个类型为T的变量clazz。
第二个创建一个Class类型的变量clazz,它是泛型类型,由T参数化。与List&lt; T&gt;比较,即T列表。
答案 3 :(得分:3)
在第一个中你得到一个T的实例,在第二个中你会得到一个T类的实例(基本上,你在第一个案例中调用clazz.getClass()
会得到什么)。