JavaParser 如何在 CompilationUnit 中获取类名
JavaParser how to get classname in CompilationUnit
我有一条通往 .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中,创建访问者对象以使用 visit() 获取编译对象和列表作为参数。
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
希望这可以解决您的问题:)
我有一条通往 .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中,创建访问者对象以使用 visit() 获取编译对象和列表作为参数。
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
希望这可以解决您的问题:)