Java 1.6.0_25 kullanıyorum.Class.getAnnotation() neden bir yayın yapmamı gerektiriyor?
Ben bir ek açıklama tanımlanmıştır:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
String value();
}
Ve sonra ben getAnnotation kullandığınızda:
Resource resource = (Resource)cls.getAnnotation(Resource.class);
derleyici ve IDE ben sonucu döküm gerektiğini kabul ediyorum, ama getAnnotation Java bildirildi 1.5 belge şu şekilde:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass);
Resource.class tür sınıf olduğundan beri Bu, cls.getAnnotation (Resource.class) türünün Kaynak türünü döndürmesi gerektiği anlamına gelir ve benim de yayınlamam gerekir.
GetAnnotation'u kullanarak bulduğum tüm örnekler bir döküm almıyor, bu yüzden yanlış bir şey yapmam gerekiyor.
Bu, ancak meraktan yoksun çalışır: Neden ilk satır derleme değil mi? GetAnnotation yöntemi, Sınıfının T'sini hiç kullanmaz, bu nedenle herhangi bir fark yaratmamalıdır? (tabii ki yapar!) –
assylias
Ben ham sınıf 'Class' kullandığınızda, derleyici pre-generics Java ile geriye dönük uyumluluk için sınıftaki tüm jenerikler unutur. – Jesper
Kesinlikle işe yaradı. Garip görünüyor, ama sanırım @Jesper, geriye dönük uyumluluk için doğru. –