繁体   English   中英

JavaParser如何在CompilationUnit中获取类名

[英]JavaParser how to get classname in CompilationUnit

我有一条到 a.java class 的路径,例如“./src/module/car.java”,我像这样解析它:

File sourceFileCar = new File("./src/module/car.java");
CompilationUnit cuCar = StaticJavaParser.parse(sourceFileCar);

如何在之前不知道的情况下获取 car.java 文件中的 class 名称(不能使用 cuCar.getClassByName)

要访问已解析的文件,您必须创建一个访问者 class,它扩展了 VoidVisitorAdapter class。

public static class ClassNameCollector extends VoidVisitorAdapter<List<String>>{
    @Override
    public void visit(ClassOrInterfaceDeclaration n, List<String> collector) {
        super.visit(n, collector);
        collector.add(n.getNameAsString());
    }
}

创建 class 后,您必须重写 visit() 方法,该方法是访问解析文件中的节点。 在这种情况下,我们使用 ClassOrInterfaceDeclaration 作为方法参数来获取 class 名称,并通过 List 来收集名称。

在主 class 中,创建一个访问者 object 用于使用 visit() 获取编译 object 并作为参数列出。

public static void main(String[] args) throws Exception {
    List<String> className = new ArrayList<>();
    // Create Compilation.
    CompilationUnit cu = StaticJavaParser.parse(new File(FILE_PATH));
    // Create Visitor.
    VoidVisitor<List<String>> classNameVisitor = new ClassNameCollector();
    // Visit.
    classNameVisitor.visit(cu,className);
    // Print Class's name
    className.forEach(n->System.out.println("Class name collected: "+n));
}

结果如下所示。

Class name collected: InvisibleClass
Class name collected: VisibleClass
Class name collected: ReversePolishNotation

希望这可以解决你的问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM