Подтвердить что ты не робот

Аннотировать анонимный внутренний класс

Есть ли способ аннотировать анонимный внутренний класс в Java?

В этом примере вы могли бы добавить аннотацию уровня класса к Class2?

public void method1() {
  add(new Class2() {
    public void method3() {}
  });
}
4b9b3361

Ответ 1

Нет. Вам нужно будет продвигать его в "правильный" класс. В случае необходимости он все еще может быть включен в внешний класс, поэтому он не должен быть классом верхнего уровня, или публичным или каким-либо другим. Но для определения аннотации требуется правильное определение класса.

Ответ 2

Пока нет. Эта функция предлагается JSR 308 и может быть включена в будущие версии Java.

Ответ 3

Да, как указано yegor256, это возможно, поскольку JDK 8 принял JSR 308 (аннотации типов).

Итак, всякий раз, когда аннотация оформляется @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()));