java中parser_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 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 annotationParamValueList = new NodeList<>();
annotationParamValueList.add(new StringLiteralExpr("Value1");
annotationParamValueList.add(new StringLiteralExpr("Value2");
ArrayInitializerExpr annotationParamValueArrayInitializerExpr = new ArrayInitializerExpr(annotationParamValueList);
Name annotationName = new Name("AnyAnnotationName");
NodeList 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可以微信搜索:“程序员文明”,里面有大神会给予解答,也会有许多的资源可以供大家学习分享,欢迎大家前来一起学习进步!
java中parser_JavaParser:Java代码生成相关推荐
- java编译程序的基本命令是什么,【填空题】Java中编译java 程序的命令是 1 ,执行java程序的命令是 java 。...
[填空题]Java中编译java 程序的命令是 1 ,执行java程序的命令是 java . 更多相关问题 [多选] 下列骨折中属于关节外骨折的是(). [多选] 骨折早期局部的并发症包括(). [多 ...
- java 中lock,java中lock获取锁的四种方法
在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...
- java中setid(),Java Process.setId方法代碼示例
本文整理匯總了Java中org.activiti.bpmn.model.Process.setId方法的典型用法代碼示例.如果您正苦於以下問題:Java Process.setId方法的具體用法?Ja ...
- java中.of,java中的sizeof
关键字: java sizeof 在C/C++中,当我们想知道一个对象或者一个原始数据类型所占用的内存大小时,只需简单调用sizeof操作符即可,但是,在java中是没有相应的操作符或者方法来直接完成 ...
- java获取vm运行参数_如何获取在Java中运行Java VM的版本?
java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...
- java中.of,java中instanceof的用法
java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的 ...
- java中decrement,Java Math decrementExact()用法及代码示例
java.strictmath.lang.decrementExact()是java中的内置函数,该函数返回减1的参数,如果结果溢出指定的数据类型long或int,则抛出异常,具体取决于在方法参数上使 ...
- java中文件,java中文件操作大全
java中文件操作大全 一.获得控制台用户输入的信息 view plaincopy to clipboardprint? / //获得控制台用户输入的信息 return throws ioexcept ...
- Java中的java.util包
The java.util package is part of java.base module. This package contains the most important APIs and ...
- java中decrement,Java LongAdder decrement()用法及代码示例
Java中的LongAdder类创建一个初始和为零的新加法器. Java.LongAdder.decrement()是Java中的内置方法,可将值减少1. 用法: public void decrem ...
最新文章
- BZOJ1391: [Ceoi2008]order
- 2020 China Collegiate Programming Contest Changchun 	F - Strange Memory(dsu on tree + 位运算小技巧)
- 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据
- python之flask框架详解
- java中8种基本类型与运算符
- java面试常见问题
- python 矩阵除法_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
- CA ARCserve Backup系列(1)—安装
- C++静态库和动态库用法
- Stata15 Unicode:一次性转码,解决中文乱码问题
- android 仿饿了么地图,微信小程序仿饿了么地址定位、筛选与回传
- 解决raise OSError(“Truncated File Read“)OSError: Truncated File Read
- 百度竞价如何过滤无效点击
- 简单几步解决ie打不开闪退的问题 亲测有效
- 树莓派+PHP+Mairadb数据库读取DHT11
- NetSpider 网络蜘蛛1.0 的简介
- 行人重识别(3)——行人重识别(基于图像)综述
- Euler Finance 完成 3200 万美元融资 Haun Ventures 领投
- 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...
- 外行对程序员误会有多深!扎心了!
热门文章
- oracle mac版安装步骤,Mac版安装oracle教程
- python水仙花数的编程代码-Python 求“水仙花数”的方法和具体代码
- 计算机软考网络工程师,软考之网络工程师总结
- 速卖通开放平台调用菜鸟组件实现云打印
- 用什么工具可以制作gif?分享一款在线制作gif动画工具
- linux点亮桌面,教你如何点亮自己的Ubuntu 屏幕
- 万字长文干货,广告投放中常说的CPA、CPC、CPD、CPT、CPS、CPM、CPI是什么意思?
- 学习编程需不需要背代码。
- 软测人员周报怎么写?(模板)
- vasp计算脚本放在服务器的位置,vasp计算所需服务器配置