2008-12-18 78 views
7

我寫了一個Java註釋,看起來像這樣基於字段的類型,一個編譯時錯誤:我可以生成被註釋

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) // can I further limit this to only fields of type DomainObject? 
public @interface Owns { 
} 

在簡要看着我身邊看不到,如果有一個進一步限制此註釋的使用方式,以便僅註明特定類型的字段。此註釋是我們的域的自定義,並且只能用於基礎域對象類的實例。

有誰知道如何在編譯時強制執行此操作嗎?

感謝您的幫助!

回答

8

您可能會在annotation processor中發出錯誤(如果您需要Java 5支持,您必須使用private API)。您可以使用從ProcessorEnvironment傳遞給init的Messager

這可能取決於您的工具鏈。如果您使用javac通過命令行或通過構建腳本編譯,應該沒問題。在我的Eclipse版本中,我必須爲項目手動啓用註釋處理器(通過項目設置),並且錯誤沒有出現在任何明顯的位置。 (JDT註釋插件確實有擴展點,如果您想提供自定義支持,它們可以更好地與IDE集成。)使用常用工具進行檢查會付出代價,特別是在需要支持任意開發環境時。

+0

這是我正在尋找的信息。我會深入研究,看看是否值得添加這些檢查。謝謝。 – 2008-12-18 19:01:16

0

我相信這在編譯時不可執行 - 如果你想確保它不在任何不適當的字段上,你將不得不在運行/加載時檢查。