2011-08-11 74 views
4

假设我有一些注释(个),例如接口:实现接口的Java类能否自动继承注释?

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

并假设我让一个实现接口的类:

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

是否有可能为Foo类莫名其妙“继承”或自动复制IFoo及其成员的全部或部分注释(例如自动注释Foo@SpecialClass等)?

这将便于实现Web服务类(如那些由JAX-WS“的wsimport”工具生成),但没有明确其复制接口注释实现类(如javax.jws.WebService仅通过实施其标注的接口,javax.xml.ws.RequestWrapper等)。

回答

6

编辑:我离开这里这个答案一般信息和未来的读者,但安德烈亚斯指出了我已经错过的Javadoc的一个重要的一点:

请注意,此元注释类型都有如果注释类型用于注释除类之外的任何内容,则不起作用。还要注意,这个元注释只能使注解从超类继承;已实现的接口上的注释不起作用。

换句话说,它不会帮助在这种情况下。当然,如果你能够控制注解本身,它也是唯一有用的。

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


你试过应用Inherited注释到SpecialClass注释本身?

指示注释类型被自动继承。如果注解类型声明中存在一个继承的元注释,并且用户在类声明中查询注释类型,并且该类声明没有该类型的注释,那么将自动为该类的超类查询注释类型。这个过程将被重复,直到找到这个类型的注释,或者到达类层次结构(Object)的顶部。如果没有超类具有此类型的注释,那么查询将指示相关类没有这种注释。

那当然听起来就像你想要的。

+3

这是一个show-stopper ?: *已实现的接口上的注释没有任何效果*(形式为javaDoc) –

+1

好的发现但假设我不控制注释的来源(例如'javax.jws.WebService') ? – maerics

+0

@Andreas_D:糟糕 - 我没有发现。卫生署。将编辑。 –