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

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

所以可以使用genericstypes的方法 –

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

这是一个相当不错的总结优点: http : //download.oracle.com/javase/tutorial/extra/generics/literals.html

在1.5版本的语言指南的generics部分有一个简短的提及:

更令人惊讶的是,class级已被基因化。 类文字现在用作types标记,提供运行时和编译时types信息。 这样可以在新的AnnotatedElement接口中启用由getAnnotation方法示例的静态工厂样式:

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

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

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

仿制药之前,你必须把结果投给作者。 你也没有办法让编译器检查实际参数是否表示Annotation的子类

真正的原因是Neil Gafter给出的:

当我们在JDK5中将generics添加到Java时,我将类java.lang.Class更改为genericstypes。 例如,String.class的types现在是Class <String>。 Gilad Bracha为此创造了术语types标记。 我的意图是启用特定风格的API,Joshua Bloch称之为THC,或Typesafe Heterogenous Container模式。