首页 > 解决方案 > Java反汇编包含组件中方法头的字符串

问题描述

有没有办法解析包含方法头的字符串,如:

public static int calculate(int a, int b)

进入组件

还是我必须自己编程?

标签: javaparsing

解决方案


您可以使用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();
}

推荐阅读