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

mae*_*ics 4 java annotations web-services jax-ws

假设我有一个带有一些注释的接口,例如:

@SpecialClass
public interface IFoo { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

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

public class Foo implements IFoo { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

类是否可能Foo以某种方式"继承"或自动复制来自IFoo其成员的所有或部分注释(例如,自动注释Foo@SpecialClass等)?

这将便于实现Web服务类(如那些由JAX-WS"的wsimport"工具生成)由刚刚执行其标注的接口,而无需显式不必界面注释复制到实现类(如javax.jws.WebService,javax.xml.ws.RequestWrapper等).

Jon*_*eet 6

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

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

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

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


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

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

听起来就像你想要的那样.

  • 这是一个show-stopper?:*实现的接口上的注释没有效果*(形成javaDoc) (3认同)