2014-10-29 52 views
4

我想使用Java註釋插入代碼(方法調用等)。假設我有這樣的代碼:如何使用Java批註像C宏一樣插入一些樣板代碼?

 ActionBar bar = getActionBar(); 
    assert bar != null; 
    bar.setIcon(android.R.color.transparent); 
    EventBus.getDefault().register(this); 
    checkGPS(); 

此代碼出現在我的每個Activity類中。而不是每次我想要這樣寫:@PrepareActivity這將擴大代碼。在C或C++中,我可以簡單地使用#define PrepareActivity \ ...。我可以使用Java註釋編寫相同的代碼嗎?以及如何做到這一點?謝謝。

+1

你能不能創建一個方法,'prepareActivity(...);'? – 2014-10-29 12:55:49

回答

3

註解並不意味着改變代碼。有些特殊的Java編譯器(例如Projekt Lombok)會彎曲這些規則。

但是你不需要任何花哨。只是使類實現包含getActionBar()checkGPS()的接口,然後你可以寫一個靜態輔助方法:

public static void prepare(IThing thing) { 
    ActionBar bar = thing.getActionBar(); 
    assert bar != null; 
    bar.setIcon(android.R.color.transparent); 
    EventBus.getDefault().register(this); 
    thing.checkGPS(); 
} 
+0

謝謝。這有幫助!但是,你能解釋一下爲什麼註釋不能改變代碼嗎?我認爲他們是爲代碼生成而設計的。像Google Guice,Spring或Dagger這樣的庫使用了這個。或者我誤解了一些東西? – MainstreamDeveloper00 2014-10-30 13:11:18

+0

註解可以生成額外的代碼(即新類和其他文件)。他們不得修改它們所包含的代碼。請參閱http://docs.oracle.com/javase/tutorial/java/annotations/您提到的庫使用註釋來對代碼運行額外的檢查(無需修改),在類路徑中查找類和方法等。沒有他們實際上修改了包含註釋的類的字節碼。 – 2014-10-30 13:17:50

4

我從這個this的帖子的答案中收集的,似乎沒有標準的做你想做的方式。有可能使用面向Aspect的編程,或者在鏈接的文章中找到答案可以提供幫助?

項目龍目島做類似的東西,他們解釋他們的伎倆here

+0

+1方面。 – alex2410 2014-10-29 12:59:31

相關問題