首页  >  文章  >  Java  >  为什么 Java 类不从实现的接口继承注释?

为什么 Java 类不从实现的接口继承注释?

Linda Hamilton
Linda Hamilton原创
2024-11-04 18:18:02513浏览

Why Don't Java Classes Inherit Annotations from Implemented Interfaces?

Java 接口中的注解继承

为什么 Java 类不从实现的接口继承注解? @Inherited 注释的文档中专门概述了此行为:

Note also that this meta-annotation only causes annotations to be inherited from superclasses; annotations on implemented interfaces have no effect.

此选择是经过深思熟虑的,因为它可以防止微妙类型的多重继承冲突。考虑以下示例:

<code class="java">@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Baz {
    String value();
}

public interface Foo {
    @Baz("baz")
    void doStuff();
}

public interface Bar {
    @Baz("phleem")
    void doStuff();
}

public class Flipp {
    @Baz("flopp")
    public void doStuff() {}
}

public class MyClass extends Flipp implements Foo, Bar {}</code>

如果继承了接口的注释,则调用 MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value() 将导致歧义:

  • 应该继承 Foo 的 @Baz 注解吗?
  • 还是应该继承 Bar 的 @Baz 注解?
  • 还是应该继承 Flipp 的 @Baz 注解超类应该被继承吗?

为了避免这种冲突,Java 明确不从接口继承注释。这可以确保注释的继承层次结构清晰且一致。

如果需要接口注释,建议显式注释实现类方法。这提供了控制应用于每个方法的特定注释的灵活性。

以上是为什么 Java 类不从实现的接口继承注释?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn