Аннотировать анонимный внутренний класс - PullRequest
32 голосов
/ 11 июня 2010

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

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

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

Ответы [ 3 ]

35 голосов
/ 11 июня 2010

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

11 голосов
/ 10 февраля 2013

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

7 голосов
/ 24 ноября 2016

Да, как упомянуто 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()));   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...