2011-12-27 49 views
5

我很好奇,如果可以在運行時期間或之前的類或方法上使用註釋,並用記錄註釋字符串替換註釋。例如,如果在Android上:在運行期間或之前用日誌記錄替換java註釋

@LogComments 
class MyActivity extends Activity { 
    @Override public void onCreate(Bundle b) { 
     super.onCreate(b); 
     // set some local vars 
     int a = 1; 
     int b = 2; 
    } 
} 

將轉化爲類似

class MyActivity extends Activity { 
    @Override public void onCreate(Bundle b) { 
     super.onCreate(b); 
     Log.d("TAG", "set some local vars"); 
     int a = 1; 
     int b = 2; 
    } 
} 
+3

這將不得不在編譯之前,評論不保留在類文件中。 – Mat 2011-12-27 16:12:46

+1

我不認爲有這樣的工具,我不相信這是一個好主意。日誌旨在追蹤prorgam在調試階段所做的工作(通常應刪除那些日誌)。日誌也可用於某些高級日誌記錄,如錯誤報告或幫助開發人員使用工具。評論意在解釋困難的部分代碼。他們不具有相同的意圖。 * – Snicolas 2011-12-27 16:16:38

+1

哦,在android中,建議在發佈產品之前刪除對日誌記錄的每個調用。通常通過模糊處理 – Snicolas 2011-12-27 16:17:26

回答

1

開箱即用。不,沒有任何東西允許這樣做。

現在,如果您想自己構建,您可能會創建某種編譯器擴展,使您可以解析文件並根據註釋存在的情況將註釋轉換爲日誌表達式。但是這必須作爲編譯階段的一個步驟發生,因爲註釋並不是類文件的一部分,所以在運行時不會出現這種情況。

但是,你正在談論一個非常大的項目來創建這樣的東西。此外,這種方法存在侷限性,如在註釋中添加某種表達式語言時,在運行時寫出變量值是不可能的。最後,您將創建一些複雜的東西,比如已經存在的東西,強大的東西,並且通過API使用了數百萬次。

+0

這很有趣,你以前是否曾經這樣做過,如果是這樣的話,你有沒有關於這個主題的推薦閱讀? – dskinner 2011-12-27 16:36:35

+0

確實很複雜。並不是每個評論都可以直接轉換爲日誌調用。 – user802421 2011-12-27 17:02:05

+0

你在看什麼東西?我在前面做了一些簡短的搜索,並且碰到了一個用於java http://www.cs.cornell.edu/projects/polyglot/的Polyglot,但稍後將不得不進行更深入的研究。 – dskinner 2011-12-27 17:41:21

0

沒有因爲評論是在運行時刪除這是不可能的。我能想到的最好的方法是在運行時閱讀javadoc並記錄它們。但那不包括非javadoc評論。

0

你想達到什麼目的?

如果你想啓用基於每個類的日誌記錄,你可以使用某種標誌(static final int會做)來禁用或啓用日誌記錄。看看這個主題:How do I enable/disable log levels in Android?瞭解更多有關登錄Android的技巧。

+0

我已經有一個靜態方法來處理與我的android應用程序實例綁定的日誌,並基於ant build屬性。成就就是知道如何在java運行時之前或期間完成這些項目。提出這個問題的問題可以在對主要問題的評論中看到,但對於這個問題的解決方案與這個問題無關。 – dskinner 2011-12-27 16:32:31

相關問題