Estoy usando Java 1.6.0_25.¿Por qué Class.getAnnotation() me exige hacer un reparto?
tengo una anotación definida:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Resource {
String value();
}
Y más tarde cuando uso getAnnotation:
Resource resource = (Resource)cls.getAnnotation(Resource.class);
el compilador e IDE están de acuerdo en que debía emitir el resultado, pero getAnnotation se declara en el Java 1.5 documentación como:
public <A extends Annotation> A getAnnotation(Class<A> annotationClass);
Dado que Resource.class es de tipo Clase, parece que me dice que esto significa que cls.getAnnotation (Resource.class) debería devolver el tipo Resource, y debería tener que enviarlo.
Todos los ejemplos que he encontrado usando getAnnotation no tienen un molde, por lo tanto, debo estar haciendo algo mal.
Esto funciona pero por curiosidad: ¿por qué no compila la primera línea? El método getAnnotation no usa el T de la clase, por lo que no debería hacer ninguna diferencia. (¡Obviamente lo hace!) –
assylias
Creo que cuando usas la clase raw 'Class', el compilador olvida todos los genéricos de la clase para compatibilidad con versiones anteriores de Java genérico. – Jesper
Definitivamente trabajado. Parece extraño, pero creo que @Jesper tiene razón en que es compatible con versiones anteriores. –