首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaParser如何在CompilationUnit中获取类名

JavaParser如何在CompilationUnit中获取类名
EN

Stack Overflow用户
提问于 2020-12-20 13:02:46
回答 1查看 636关注 0票数 2

我有一个指向模块类的路径,比如“./src/ .java /car.java”,我这样解析它:

代码语言:javascript
复制
File sourceFileCar = new File("./src/module/car.java");
CompilationUnit cuCar = StaticJavaParser.parse(sourceFileCar);

我如何在不知道的情况下获得car.java文件中的类名(不能使用cuCar.getClassByName)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-15 17:00:25

要访问解析后的文件,必须创建一个扩展VoidVisitorAdapter类的访问者类。

代码语言:javascript
复制
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());
    }
}

在创建一个类之后,您必须覆盖After ()方法,该方法的任务是访问已解析文件中的节点。在本例中,我们使用ClassOrInterfaceDeclaration作为方法参数来获取类名和收集该名称的传递列表。

在主类中,创建一个访问者对象,用于使用获取编译对象和列表作为参数的as ()。

代码语言:javascript
复制
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));
}

结果如下所示。

代码语言:javascript
复制
Class name collected: InvisibleClass
Class name collected: VisibleClass
Class name collected: ReversePolishNotation

希望这能解决你的问题:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65377062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档