为什么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模式。