Есть ли способ, чтобы аннотации методов передавались подклассам? - PullRequest
4 голосов
/ 13 января 2020

У меня есть несколько пользовательских аннотаций для методов, которые обычно переопределяются. Например, давайте рассмотрим что-то вроде аннотации @Async:

public class Base {
  @Async
  public void foo() {
  }
}

Есть ли способ сообщить компилятору и / или IDE, что аннотация метода должна следовать в переопределенных версиях метода, чтобы когда кто-то расширяет Base и переопределяет foo(), аннотация @Async автоматически вставляется, подобно тому, как @Override автоматически вставляется большинством IDE?

Если нет общего способа намека на это, есть способ IntelliJ / Android Studio, указанный c way?

1 Ответ

3 голосов
/ 13 января 2020

Аннотация наследуется, если она помечена другой аннотацией @Inherited. Итак, если аннотация @Async, которую вы дали в качестве примера, принадлежит вам, просто сделайте следующее:

@Inherited
// other annotations (e.g. Retention, Target etc)
@interface Async {
}

Если, однако, это не ваша аннотация, то единственный способ сделать ее видимой в подклассе - создать тривиальная реализация foo() в этом подклассе и пометьте этот метод этой аннотацией, например

public class Base {
  @Async
  public void foo() {
  }
}
public class Child extends Base {
  // Trivial implementation needed only to make the annotation available here. 
  @Async
  public void foo() {
      super.foo();
  }
}
...