2014-01-06 110 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