实现接口的Java类能否自动继承注释?
假设我有一个带有一些注释的接口,例如:实现接口的Java类能否自动继承注释?,java,web-services,annotations,jax-ws,Java,Web Services,Annotations,Jax Ws,假设我有一个带有一些注释的接口,例如: @SpecialClass 公共接口IFoo{/*…*/} 假设我创建了一个实现接口的类: public类Foo实现IFoo{/*…*/} 类Foo是否可能以某种方式从IFoo及其成员“继承”或自动复制所有或部分注释(例如,自动将Foo注释为@SpecialClass等) 这对于实现web服务类(例如那些由JAX-WS“wsimport”工具生成的类)来说是很方便的,只需实现它们带注释的接口,而不必显式地将接口注释复制到实现类(例如javax.jws.
@SpecialClass
公共接口IFoo{/*…*/}
假设我创建了一个实现接口的类:
public类Foo实现IFoo{/*…*/}
类Foo
是否可能以某种方式从IFoo
及其成员“继承”或自动复制所有或部分注释(例如,自动将Foo
注释为@SpecialClass
等)
这对于实现web服务类(例如那些由JAX-WS“wsimport”工具生成的类)来说是很方便的,只需实现它们带注释的接口,而不必显式地将接口注释复制到实现类(例如
javax.jws.WebService
,javax.xml.WS.RequestWrapper
,等等).编辑:我在这里留下这个答案供一般信息和未来的读者参考,但Andreas指出了Javadoc中我遗漏的一个重要部分:
请注意,如果注释类型用于注释类以外的任何内容,则此元注释类型无效。还要注意,这个元注释只会导致注释从超类继承;已实现接口上的注释无效
换句话说,在这种情况下,这是没有帮助的。当然,只有当您能够控制注释本身时,它才有用
我怀疑真正的答案是,您只需在任何地方应用注释。如果您担心忘记一个类,您可能需要编写一个单元测试来查找所有类(我意识到说起来容易做起来难),并检查实现给定接口的所有类是否都存在注释
您是否尝试将注释应用于
SpecialClass
注释本身
指示注释类型是自动继承的。如果注释类型声明中存在继承的元注释,并且用户在类声明中查询注释类型,而该类声明中没有该类型的注释,则该类的超类将自动查询注释类型。将重复此过程,直到找到此类型的注释,或到达类层次结构(对象)的顶部。如果没有超类具有此类型的注释,那么查询将指示所讨论的类没有此类注释
这听起来确实是你想要的。这是一个表演的障碍吗?:在实现的接口上的注释没有效果(从javaDoc中)很好的发现,但是假设我不控制注释的来源(例如
javax.jws.WebService
)?@maerics:在这种情况下,我认为你运气不好。哇,注释上的注释。老兄,诸如此类。很好的问题和答案。