20
我正在使用Java 1.6.0_25。爲什麼Class.getAnnotation()要求我進行轉換?
我有一個註釋中定義:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
String value();
}
後來當我使用getAnnotation:
Resource resource = (Resource)cls.getAnnotation(Resource.class);
編譯器和IDE同意,我一定要投的結果,但getAnnotation在Java中聲明1.5文檔爲:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass);
由於Resource.class的類型是Class,因此它似乎我這意味着cls.getAnnotation(Resource.class)應該返回類型資源,我應該需要投。
我發現使用getAnnotation的所有示例都沒有轉換,所以我必須做錯了什麼。
這有用,但出於好奇:爲什麼不第一行編譯? getAnnotation方法根本不使用類的T,所以它不應該有什麼區別? (它顯然是!!) –
assylias
2012-02-24 15:25:12
我認爲,當您使用原始類'Class'時,編譯器會忘記類中的所有泛型,以便與pre-generics Java向後兼容。 – Jesper 2012-02-24 15:27:06
絕對有效。似乎很奇怪,但我想@Jesper是正確的,它是爲了向後兼容。 – 2012-02-24 15:32:51