2011-08-11 75 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:糟糕 - 我沒有發現。衛生署。將編輯。 –