簡體   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