java - Java反汇编包含组件中方法头的字符串
问题描述
有没有办法解析包含方法头的字符串,如:
public static int calculate(int a, int b)
进入组件
- 访问修饰符(公共、受保护、私有)
- 非访问修饰符(静态、抽象)
- 返回类型
- 方法名称
- 参数列表
还是我必须自己编程?
解决方案
您可以使用JavaParser库来提取此信息。使用 Maven:
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-core</artifactId>
<version>${javaparser.version}</version>
</dependency>
然后,声明一个解析器实例和要解析的主体。请注意,您必须对输入的内容添加后缀{}
,以符合有效的方法声明。
JavaParser parser = new JavaParser();
String body = "public static int calculate(int a, int b){}";
ParseResult<BodyDeclaration<?>> result = parser.parseBodyDeclaration(body);
if (result.isSuccessful()) {
BodyDeclaration<?> bodyDeclaration = result.getResult().get();
}
之后,验证它是一个方法声明来应用向下转型MethodDeclaration
。最后,您可以提取必要的信息。
if (bodyDeclaration.isMethodDeclaration()) {
MethodDeclaration method = (MethodDeclaration) bodyDeclaration;
// [public, static]
NodeList<Modifier> modifiers = method.getModifiers();
// int
Type type = method.getType();
// calculate
SimpleName name = method.getName();
// [int a, int b]
NodeList<Parameter> parameters = method.getParameters();
}