Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java解析器解析Java文件中的属性_Java_Javaparser - Fatal编程技术网

使用Java解析器解析Java文件中的属性

使用Java解析器解析Java文件中的属性,java,javaparser,Java,Javaparser,我下面有三节课 public class A { B b; } public class B { C c; public C getC() { A a; return c; } } public class C { } 我想使用java解析器解析这些类,该解析器包含以下信息: 类名 方法名 属性名称 我建议您从GitHub上最新版本的JavaParser开始: 您可以使用Maven轻松创建一个项目,其中包括依赖项Jav

我下面有三节课

public class A {
     B b;
}

public class B {
    C c;

    public C getC() {
        A a;
        return c;
    }
}

public class C {

}
我想使用java解析器解析这些类,该解析器包含以下信息:

  • 类名
  • 方法名
  • 属性名称

我建议您从GitHub上最新版本的JavaParser开始:

您可以使用Maven轻松创建一个项目,其中包括依赖项JavaParser:

  <dependency>
      <groupId>com.github.javaparser</groupId>
      <artifactId>javaparser-core</artifactId>
      <version>2.2.1</version>
  </dependency>
JavaParser返回抽象语法树的根节点,该树是一个编译单元,表示文件的所有内容。您只需浏览此树并提取信息

例如,从CompilationUnit中,您可以使用返回列表的方法获取顶级类型(但不是内部类)。类型声明可以是类、接口或枚举。TypeDeclaration具有getName方法,您可以使用该方法获取已声明类型的名称。然后,您可以询问类型声明的成员并查找内部类、方法或字段

导航树的其他两种方法是: *利用访客 *使用每个节点上可用的方法(编译单元、类型声明、方法声明、语句等)

要使用访问者模式,请检查JavaParser中的包:已经有几个抽象访问者需要扩展。一旦创建了访问者,就可以使用
compilationUnit.accept(myVisitor,)调用它,它将对整个树进行爬网

如果要改用getChildrenNodes,可以执行以下操作:

void processNode(Node node) {
   if (node instanceof TypeDeclaration) {
      // do something with this type declaration
   } else if (node instanceof MethodDeclaration) {
      // do something with this method declaration
   } else if (node instanceof FieldDeclaration) {
      // do something with this field declaration
   }
   for (Node child : node.getChildrenNodes()){
      processNode(child);
   }
}

...
CompilationUnit cu = JavaParser.parse(sourceFile);
processNode(node);
...
希望它能帮助您,如果您有其他特定于JavaParser的问题,请随时加入


免责声明:我是JavaParser项目的贡献者

好吧,那就去做吧。还有,那将是什么样的解析器实现呢?我想使用Java解析器(Japa解析器)。来源链接:谢谢你的回答。对于我上面的代码,我仍然无法解析字段名。你能帮帮我吗?
void processNode(Node node) {
   if (node instanceof TypeDeclaration) {
      // do something with this type declaration
   } else if (node instanceof MethodDeclaration) {
      // do something with this method declaration
   } else if (node instanceof FieldDeclaration) {
      // do something with this field declaration
   }
   for (Node child : node.getChildrenNodes()){
      processNode(child);
   }
}

...
CompilationUnit cu = JavaParser.parse(sourceFile);
processNode(node);
...