2012-05-01 23 views
0

有沒有辦法在Java中獲得方法的@param註釋?我知道可以通過解析每個java文件輕鬆實現。但是,這似乎是應該已經可以在像JavaCC這樣的工具中使用的東西了。獲取Java中的方法的@param註釋

例子 - 我希望能夠讀取通道和觀察員:

* @param ch  the character to be tested 
* @param observer the image observer to be notified 

回答

3

如果您有資源,您可能會考慮使用QDox,它被描述爲一個高速,小尺寸的解析器,用於從源文件中提取完整的JavaDoc @tags的類/接口/方法定義。它被設計爲由活動代碼生成器或文檔工具使用。

示例代碼from documentation

JavaMethod mth = cls.getMethods()[0]; 

// Access the JavaDoc comment 
String comment = mth.getComment(); 
    // "This method does nothing at all." 

// Access a single doclet tag 
DocletTag returns = mth.getTagByName("returns"); 
returns.getName(); // "returns"; 
returns.getValue(); // "A boolean of whether we care or not." 

// Access multiple doclet tags with the same name 
DocletTag[] params = mth.getTagsByName("param"); 
params[0].getValue(); // "Someone's email address." 
params[1].getValue(); // "Date of birth." 

// Access specific parameters of a doclet tag by index 
DocletTag permission = mth.getTagByName("permission"); 
permission.getParameter[0]; // "administrator" 
permission.getParameter[1]; // "full-access" 

// Access specific parameters of a doclet tag by name 
DocletTag webservice = mth.getTagByName("webservice"); 
webservice.getNamedParameter("type"); // "rpc" 
webservice.getNamedParameter("name"); // "myservice" 
+0

我測試了QDox,它完成了工作 - 謝謝 – Paligulus

1

你指的是在javadoc註釋的@param? Javac(或者你真的指JavaCC的java編譯器?)忽略它們,因爲這些只是註釋。 雖然你可以使用javadoc工具,但如果內存服務的話,現在即使是現在也可以編寫自己的doclet。

或者你指的是方法註釋?如果在註釋聲明中將保留設置爲運行時,那麼可以在java代碼中檢索這些代碼。

+0

我已經更新了問題 - 現在應該清楚 – Paligulus

+0

好,所以javadoc的東西,但我的答案涵蓋,我害怕,你不能從標準的Java類文件中獲得。如果它們是用調試信息編譯的,則可以使用類(字節碼)檢查工具/庫從類文件中獲取它們。所以確實你需要解析java源文件,但是一個javadoc doclet可以爲你做,或者我猜想一些奇特的正則表達式。 Javac忽略了評論,而javadoc基本上是很棒的評論。 –

+0

我不確定是否可以在Java的另一個類中運行doclet - 該死! – Paligulus

1

簡短的回答是「不」:評論是在運行時不會訪問,因爲評論是編譯成.class文件。

你可以使用各種方法解析源代碼(如果有的話),但這似乎是你的問題的主題。