2012-06-13 58 views
1

我認爲這是不可能的,但也許我錯了。所以我問你,如果有可能的話。 ;-)註解:限制對註釋類的引用

如果我定義了接受它擴展一些接口或類是可能的唯一一類引用一個註解:

Class<? extends ServiceProviderIF> serviceIFProvider(); 

在這個註釋,我只可以增加一些類延伸ServiceProviderIF。 我的問題:這樣的定義是否可以用於其他註釋?與僞像這樣

Class<? contains AnnotationXYZ> classReferences(); 

AnnotationXYZ意味着另一個註釋定義。只有包含此註釋才能接受應添加的類。

TIA和最好的問候,奧利

回答

1

這是不可能的。註釋可以在任何類型(類,接口)上設置,但Java方法不能返回包含來自不同層次的類型的多類型。換句話說,您應該將所有具有註釋AnnotationXYZ的類放在某個接口或類Blabla下的相同層次結構中,然後使用<? extends Blabla>類型的通配符。

+0

感謝您的提示,但這使過程更復雜,恕我直言,沒有任何好處。原因是確保此註釋列表中的所有元素都具有特定註釋X(此註釋X具有一些附加信息)。所以如果這個類擴展了一個特殊的接口,那麼注意只添加帶有這個註解的類是沒有好處的。或者我錯了?最好的問候,Oli – nauni77

+0

方法返回類型指定調用者和被調用者之間的某種契約。 AFAIK,註釋不適用於合同。 – spektom

3

不,這是不可能的。通用類型只接受類型。註釋不定義類型。

+0

你好,謝謝你的回答。語法只是僞代碼。例如: 類 classReferences()with AnnotationXYZ;其他語法也歡迎獲得解決方案。 – nauni77

+0

有沒有可以讓你這樣做的符號。只有運行時檢查。 –

+0

謝謝JB Nizet,那就是我現在這樣做的方式。但是有關Annotation的信息需要在JVM中出現(@Retention(RetentionPolicy.RUNTIME))。這並不是那麼好,但如果沒有其他方法可以做到這一點,那就是「最佳做法」。感謝和問候,奧利 – nauni77