为什么Java的Class <t>是通用的?</t>

时间:2009-07-07 18:34:07

标签: java generics

为什么Java的Class<T>是通用的?

4 个答案:

答案 0 :(得分:33)

因此可以使用泛型类型的方法 -

Class<Foo> klass = Foo.class;
Foo f = klass.newInstance();
Foo f = klass.cast(Object);

答案 1 :(得分:15)

答案 2 :(得分:14)

在1.5版本的语言指南的Generics部分中简短地提到了这一点:

  

更令人惊讶的是,班级已经普及。类文本现在用作类型标记,提供运行时和编译时类型信息。这样可以在新的AnnotatedElement接口中使用getAnnotation方法实现静态工厂样式:

<T extends Annotation> T getAnnotation(Class<T> annotationType); 
  

这是一种通用方法。它从其参数中推断出其类型参数T的值,并返回一个适当的T实例,如下面的代码片段所示:

Author a = Othello.class.getAnnotation(Author.class);
  

在泛型之前,您必须将结果转换为Author。此外,您无法让编译器检查实际参数是否表示Annotation的子类

答案 3 :(得分:8)

真正的原因是Neil Gafter

  

当我们在JDK5中向Java添加泛型时,我改变了类   java.lang.Class成为泛型类型。例如,类型   String.class现在是Class&lt;字符串&gt; 。吉拉德·布拉查(Gilad Bracha)创造了这个词   这个令牌。我的意图是启用特定样式的API,   Joshua Bloch称之为THC或Typesafe异质容器   图案。