2009-09-23 57 views

回答

2

註解並不意味着作爲轉換代碼的工具;他們只是添加元數據到代碼。例如,您不能將註釋用於條件編譯。

由於Sun's tutorial on annotations說:

註釋提供有關程序,是不是程序本身的一部分數據。它們對它們註釋的代碼的操作沒有直接影響。

Wikipedia說:

當Java源代碼被編譯,註釋可以通過編譯器插件叫做註解處理器處理。處理器可以生成信息性消息或創建額外的Java源文件或資源,這些文件或資源又可以被編譯和處理,但處理器不能自己修改註釋的代碼。

因此,註釋處理器插件無法爲您提供C預處理器所具有的所有功能。

2

您可以使用註釋處理框架執行編譯時任務。這不是一個預處理器的強大,因爲你不能做這樣的事情:

@RunOnlyOn(OS.Mac) public void someMethod() { ... } 

一些很好的用例標註處理程序是:

  • 從註釋類,例如創建映射文件創建一個hibernate映射文件;
  • 創建具有特定註釋的類的索引,例如從測試類的源文件夾創建testng xml文件;
  • 強制執行通常不可用的編譯時間約束,例如, having a no-arg constructor

請注意,從Java 6開始,不再需要APT,因爲所有正確聲明的註釋處理器都參與編譯。

+1

其實你可以如果你做你自己的註釋檢查類加載器並自己實現註釋;但是大部分時間都不值得。 – Esko 2009-09-23 09:51:01

+0

@Esko:聽起來很有趣:-)你有一個概念驗證的鏈接嗎? – 2009-09-23 13:16:58

+0

呃,我想我可以做一個(我自己沒有真正寫過ClassLoaders),但這需要一些時間。該死的,現在你讓我想到實際上是這樣做的:)如果我想出了一些有用的東西,我會最終報告,只是不要屏住呼吸:) – Esko 2009-09-24 05:24:51

相關問題