首页 > 解决方案 > 有没有办法将方法注释传递给子类?

问题描述

我在通常被覆盖的方法上使用了一些自定义方法注释。例如,让我们考虑类似@Async注解的东西:

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

有没有办法向编译器和/或 IDE 发出信号,方法注释应该遵循方法的覆盖版本,以便当有人扩展Base和覆盖时foo()@Async自动插入注释,类似于@Override大多数 IDE 自动插入的方式?

如果没有暗示这一点的一般方式,是否有 IntelliJ/Android Studio 特定方式?

标签: javaandroid-studiointellij-ideaannotationsjava-annotations

解决方案


如果标注有其他注解,则该注解被继承@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();
  }
}

推荐阅读