Sto usando Java 1.6.0_25.Perché Class.getAnnotation() richiede che esegua un cast?
Ho un'annotazione definita:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
String value();
}
E più tardi quando uso getAnnotation:
Resource resource = (Resource)cls.getAnnotation(Resource.class);
il compilatore e IDE sono d'accordo che devo lanciare il risultato, ma getAnnotation è dichiarata nel Java 1.5 documentazione come:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass);
Poiché Resource.class è di tipo Classe, sembra me questo significa che cls.getAnnotation (Resource.class) dovrebbe restituire il tipo Resource, e dovrei avere bisogno di trasmettere.
Tutti gli esempi che ho trovato usando getAnnotation non hanno un cast, quindi devo fare qualcosa di sbagliato.
Questo funziona, ma per curiosità: perché la prima linea non si compila? Il metodo getAnnotation non usa affatto la T della Classe quindi non dovrebbe fare alcuna differenza? (ovviamente lo fa !!) – assylias
Penso che quando si utilizza la classe raw 'Class', il compilatore dimentichi tutti i generici della classe per compatibilità con le versioni precedenti di Java generico. – Jesper
Ha funzionato sicuramente. Sembra strano, ma immagino che @Jesper abbia ragione che sia compatibile con le versioni precedenti. –