Java 接口中的注解继承
注解继承,由 @Inherited 注解表示,允许注解从超类传播到子类。然而,此规则的一个值得注意的例外是,已实现接口上的注释不会由实现类继承。
根据 @Inherited 的文档,“此元注释仅导致注释从超类继承;注释对实现的接口没有影响。”
非继承背后的原因
此设计决策可以防止类使用相同冲突注释实现多个接口的情况下发生继承冲突。考虑以下示例:
<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 MyClass implements Foo, Bar{}</code>
如果注释是从接口继承的,则哪个 @Baz 值将与 MyClass.doStuff() 方法关联? “baz”,“phleem”,还是其他什么?
实际影响
接口上的注释继承通常被认为是不常见和不切实际的,因为潜在的冲突和当多个接口指定冲突的注释时,很难确定正确的注释。建议依赖超类上的注释或在依赖注入框架中使用替代机制进行方法拦截。
以上是为什么 Java 接口不继承注解?的详细内容。更多信息请关注PHP中文网其他相关文章!