2014-01-06 234 views
2

我想寫一個代碼,將方法簽名作爲字符串輸入,然後從中提取信息 - 返回類型,修飾符,方法名稱,參數類型,參數名稱,例外。解析方法簽名字符串

有很多方法來編寫方法簽名,我希望我的代碼能夠處理所有這些方法。所以我對自己寫這篇文章感到懷疑。

Java瞭解它,這要歸功於java語法。我發現這個類SignatureParser在 sun.reflect.generics.parser(來源:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/reflect/generics/parser/SignatureParser.java

我被卡住了,無法使用它,但是需要你的幫助。這是我到目前爲止已經試過(這是正確的在一開始給了一個錯誤)

MethodTypeSignature mts = SignatureParser.make().parseMethodSig(method); 

要弄清楚什麼是錯了,我試圖打破它。但我無法弄清楚什麼。

此外,這種解析方式留給我的方法類型,但沒有方法名稱。我需要手動編寫代碼,還是有人可以提出一些庫方法?

+0

有可能是關於如何在javadoc實用程序中實現它的一些想法,他們已經解析代碼並拆分方法部分。 –

回答

-2

首先你的方法應該在運行jvm的類下定義。 然後你得到關於這個類的信息。

Class cls = Class.forName("yourclassname"); 

之後,您可以使用此方法獲取函數的信息。

Method[] metods = cls.getMethods(); 

您可以遍歷方法找到了,你有興趣,並使用許多有用的函數提取像getParameterTypes或getExeptionTypes信息...

Method yourMethod = null; 
if (metods[i].getName().equals("yourmethodname")){ 
    yourMethod = methods[i]; 
} 
yourMethod.getParameterTypes(); 
yourMethod.getReturnType(); 
... 

http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html

+0

感謝您的快速回復。您的解釋中的代碼就像您所說的那樣適用於正在運行的JVM中的類。它從該類中定義的方法中提取信息。 我的問題是,我正在從用戶輸入方法簽名(並將其存儲在一個字符串中)。那麼我如何從那裏獲得解決方案? 有一個缺少的鏈接,我想不出...... – Nikhil

+0

有沒有什麼能阻止你從方法簽名解析類名和函數名:)) – cgon

+0

no no no。我的意思是...想象一下這段文字。用戶在這裏輸入「public static void main(String [] args),我把它存儲在一個'String methodd = new String(」public static void main(String [] args)'...我該去哪裏從這裏...你建議的解決方案解析我的班級的方法...因此,例如,這是我的班級: 'public class MethodSpy { String methodd; public static methoddParser(String methodd){ // method身體 } }' 所以,你的解決方案將解析這個方法 - '公共靜態methoddParser(字符串methodd)' 我想解析字符串'methodd' – Nikhil