Sí, as mentioned by yegor256, es posible, desde JDK 8 adopted JSR 308 (type annotations).
Ahora, cada vez que una anotación está decorada por @Target({ElementType.TYPE_USE})
, se puede utilizar 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()));
La clase "correcta", incluso se puede definir dentro del método, por lo que su alcance es local en el método y el diseño -wise sigue siendo un detalle de implementación interna del método. – amichair
Si le sorprende la descripción de @ amichair de las clases locales (como yo), tenga en cuenta que es nueva para JDK8 y los documentos están aquí: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses. html –
Parece que las clases locales han existido desde Java 1.1 ... pero todavía son sorprendentes :-) – amichair