Есть ли способ аннотировать анонимный внутренний класс в Java?
В этом примере вы могли бы добавить аннотацию уровня класса к Class2?
public void method1() {
add(new Class2() {
public void method3() {}
});
}
Ответ 1
Нет. Вам нужно будет продвигать его в "правильный" класс. В случае необходимости он все еще может быть включен в внешний класс, поэтому он не должен быть классом верхнего уровня, или публичным или каким-либо другим. Но для определения аннотации требуется правильное определение класса.
Ответ 2
Пока нет. Эта функция предлагается JSR 308 и может быть включена в будущие версии Java.
Итак, всякий раз, когда аннотация оформляется @Target({ElementType.TYPE_USE}), ее можно использовать для аннотации анонимного класса во время выполнения. Например:
@Target({ ElementType.TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
Object o = new @MyAnnotation("Hello") Object() {};
Сложная часть заключается в том, как получить доступ к аннотации:
Class<?> c = o.getClass();
AnnotatedType type = c.getAnnotatedSuperclass();
System.out.println(Arrays.toString(type.getAnnotations()));