【发布时间】:2018-11-14 12:53:05
【问题描述】:
我使用https://github.com/javaparser/javaparser解析java源码
我尝试了很多方法来解析内部类;像这样:
class A {
int x;
public void method2() {...}
class B {
int number;
public void methods() {...}
}
}
我尝试解析 B 类及其变量和方法,但失败了。
有没有例子说明如何获取B类?
我可以解析A类方法名和内容或变量内容,像这样:
CompilationUnit cu = JavaParser.parse(in);
ClassVisitor classVisitor = new ClassVisitor();
classVisitor.visit(cu, null);
class ClassVisitor extends VoidVisitorAdapter<Void> {
@Override
public void visit(ClassOrInterfaceDeclaration n, Void arg) {
System.out.println(n.getFields());
// get class methods
for(MethodDeclaration method : n.getMethods()) {
System.out.println("Name :" + method.getName());
System.out.println("Body :" + method.getBody().get());
}
}
}
}
但我尝试解析 B 类变量和方法,失败了!
试试 CompilationUnit.getTypes(),像这样:
CompilationUnit cu = JavaParser.parse(in);
for(TypeDeclaration<?> type : cu.getTypes()) {
log.info("Type Name :{}", type.getName());
}
结果: n.s.dictionary.parse.JavaCodeParse:类型名称:A
未解析为 B 类
【问题讨论】:
-
请编辑您的问题以包含您拥有的完整源代码并描述它是如何失败的(错误消息、错误值......)。见stackoverflow.com/help/mcve。
-
但是我想分析未知的java文件,所以不知道它包含什么类。
-
我认为 CompilationUnit.getTypes() 调用可能会返回任何嵌套类的名称(但我不熟悉它,所以只是猜测)。
-
感谢您的建议。我试过了,但没有用。
标签: java javaparser