实现接口的Java类是否可以自动继承注释?

时间:2011-08-11 05:19:22

标签: java web-services annotations jax-ws

假设我有一个带有一些注释的界面,例如:

@SpecialClass
public interface IFoo { /* ... */ }

假设我创建了一个实现接口的类:

public class Foo implements IFoo { /* ... */ }

Foo是否有可能以某种方式“继承”或自动复制IFoo及其成员的全部或部分注释(例如自动注释Foo为{{1}等等)?

这可以方便实现Web服务类(例如由JAX-WS“wsimport”工具生成的那些),只需实现带注释的接口,而无需将接口注释复制到实现类(例如{{1} },@SpecialClass等。)

1 个答案:

答案 0 :(得分:6)

编辑:我在这里留下这个答案以获取一般信息和未来的读者,但安德烈亚斯指出了我错过的Javadoc的一个重要部分:

  

请注意,如果使用带注释的类型来注释除类之外的任何内容,则此元注释类型无效。另请注意,此元注释仅导致注释从超类继承;已实现的接口上的注释无效。

换句话说,在这种情况下不会提供帮助。当然,只有当你控制注释本身时它才有用。

我怀疑真正的答案是你只需要在任何地方应用注释。如果你担心忘记一个,你可能想编写一个单元测试,找到你所有的类(说起来容易做起来难,我意识到)并检查实现给定接口的所有类的注释是否存在。


您是否尝试将Inherited注释应用于SpecialClass注释本身?

  

表示自动继承注释类型。如果注释类型声明中存在Inherited元注释,并且用户在类声明上查询注释类型,并且类声明没有此类型的注释,则将自动查询类的超类以获取注释类型。将重复此过程,直到找到此类型的注释,或者到达类层次结构(对象)的顶部。如果没有超类具有此类型的注释,则查询将指示相关类没有此类注释。

肯定听起来就像你想要的那样。