这些'泛型'之间的区别Java中的语法

时间:2015-11-14 19:53:17

标签: java generics

考虑一下:

public abstract class AbstractHibernateDao< T extends Serializable > {
  private T clazz;
}

而且:

public abstract class AbstractHibernateDao< T extends Serializable > {
    private Class< T > clazz;
}

我能够编译两者 - 所以我肯定在这里做了一些基本检查。

4 个答案:

答案 0 :(得分:11)

  • 如果T clazz我们希望某个类的实例
  • 如果是Class< T > clazz,我们希望Class的实例描述T(类文字)。

因此,我们假设T我们会使用Integer。在那种情况下:

  • 在第一个示例中,clazz将允许我们存储12等。
  • 但在第二个例子中,它会期待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()会得到什么)。