JavaParser:Java代码生成

在本文中,我将向您展示如何使用...生成Java代码JavaParser。我在javaparser.org或手册中找不到关于代码生成的大量文档。因此,我认为将其解决将有助于想要尝试使用Java解析器的人。

在最简单的形式中,  JavaParser 库允许您与Java源代码交互,作为Java环境中的Java对象表示。更正式地说,我们将此对象表示称为抽象语法树(AST)。此外,它还能够操纵源代码的底层结构。然后可以将其写入文件,为开发人员提供构建自己的代码生成软件的工具。

首先,您必须实例化编译单元,然后在其上添加剩余的代码片段。

CompilationUnit compilationUnit = new CompilationUnit();

然后,您可以将import语句添加到编译单元,此处:

compilationUnit.addImport("org.springframework.boot.SpringApplication");

您可以将package语句添加到编译单元,如下所示:

compilationUnit.setPackageDeclaration("com.abc.def");

您可以将类声明添加到Java文件中:

ClassOrInterfaceDeclaration classDeclaration = compilationUnit.addClass("AnyClassName").setPublic(true);

如果要在类级别添加注释,可以使用以下代码:

classDeclaration.addAnnotation("AnyAnnotation");

您可以在新声明的类中添加方法声明,如下所示:

MethodDeclaration methodDeclaration = classDeclaration.addMethod("anyMethodName", PUBLIC);

methodDeclaration.setType("AnyReturnType");

您可以为新创建的方法声明添加参数:

methodDeclaration.addAndGetAnnotation("AnyAnnotation");

在新声明的方法之上添加注释:

BlockStmt blockStmt = new BlockStmt();

methodDeclaration.setBody(blockStmt);

要在新声明的方法中添加方法logic / block语句,请使用以下代码:

BlockStmt  blockStmt  =  new  BlockStmt();

methodDeclaration。setBody(blockStmt);

要在方法/块语句中声明和实例化变量,请使用以下代码:

ExpressionStmt expressionStmt = new ExpressionStmt();

VariableDeclarationExpr variableDeclarationExpr = new VariableDeclarationExpr();

VariableDeclarator variableDeclarator = new VariableDeclarator();

variableDeclarator.setName("anyVariableName");

variableDeclarator.setType(new ClassOrInterfaceType("AnyVariableType"));

variableDeclarator.setInitializer("new AnyVariableType()");

NodeList<VariableDeclarator> variableDeclarators = new NodeList<>();

variableDeclarators.add(variableDeclarator);

variableDeclarationExpr.setVariables(variableDeclarators);

expressionStmt.setExpression(variableDeclarationExpr);

blockStmt.addStatement(expressionStmt);

要调用方法/块语句中创建的新变量的方法,请使用以下代码:

NameExpr nameExpr = new NameExpr("anyVariableName");

MethodCallExpr methodCallExpr = new MethodCallExpr(nameExpr, "anyMethodName");

methodCallExpr.addArgument("anyArgument");

blockStmt.addStatement(methodCallExpr);

要返回在方法中创建的变量,请使用以下代码:

ReturnStmt returnStmt = new ReturnStmt();

NameExpr returnNameExpr = new NameExpr();

returnNameExpr.setName("anyVariableName");

returnStmt.setExpression(returnNameExpr);

blockStmt.addStatement(returnStmt);

要打印上面生成的代码,只需调用toString 编译单元的  方法:

String code = compilationUnit.toString();

要使用多值键值对添加注释,请使用以下代码。

NodeList<Expression> annotationParamValueList = new NodeList<>();

annotationParamValueList.add(new StringLiteralExpr("Value1");

annotationParamValueList.add(new StringLiteralExpr("Value2");

ArrayInitializerExpr annotationParamValueArrayInitializerExpr = new ArrayInitializerExpr(annotationParamValueList);

Name annotationName = new Name("AnyAnnotationName");

NodeList<MemberValuePair> annotationParamList = new NodeList<>();

MemberValuePair memberValuePair = new MemberValuePair();

memberValuePair.setName(new SimpleName("AnyValue"));

memberValuePair.setValue(annotationParamValueArrayInitializerExpr);

annotationParamList.add(memberValuePair);

AnnotationExpr annotationExpr = new NormalAnnotationExpr(annotationName, annotationParamList);

另外本人从事在线教育多年,将自己的资料整合建了一个公众号,对于有兴趣一起交流学习java可以微信搜索:“程序员文明”,里面有大神会给予解答,也会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步!

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 6,898评论 1 21
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 238评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 403评论 0 4
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 2,788评论 0 2
  • 人生里充满了安排。 从上学熬到了毕业。 从毕业到镇里工作。 现在也有了一年了。 除了让自己专业化。 似乎我都不需操...
    Oo嘟嘟阅读 65评论 0 4