pildorasinformaticas - curso java 52
Anotar clase interna anĂ³nima (3)
Aún no. Esta característica es sugerida por JSR 308 , y puede incluirse en futuras versiones de Java.
¿Hay alguna forma de anotar una clase interna anónima en Java?
En este ejemplo, ¿podría agregar una anotación de nivel de clase a Class2?
public void method1() {
add(new Class2() {
public void method3() {}
});
}
No. Necesitarías promocionarlo a una clase "adecuada". Todavía se puede delimitar dentro de la clase externa si es necesario, por lo que no necesita ser una clase de nivel superior, pública, o lo que sea. Pero sí necesita una definición de clase adecuada para adjuntar la anotación.
Sí, como lo menciona yegor256 , es posible, ya que JDK 8 adoptó JSR 308 (anotaciones de tipo) .
Así que ahora, cuando una anotación está decorada por @Target({ElementType.TYPE_USE})
, se puede usar para anotar una clase anónima en tiempo de ejecución. Por ejemplo:
@Target({ ElementType.TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
Object o = new @MyAnnotation("Hello") Object() {};
La parte difícil es cómo acceder a la anotación:
Class<?> c = o.getClass();
AnnotatedType type = c.getAnnotatedSuperclass();
System.out.println(Arrays.toString(type.getAnnotations()));