为什么Java的Class<T>
是通用的?
答案 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异质容器 图案。