javaparser_JavaParser生成,分析和修改Java代码

2023-11-12

javaparser

作为开发人员,我们经常鄙视手动进行重复工作的人员。

我们认为, 他们应该实现这一目标

尽管如此,我们还是进行与编码有关的所有活动。 当然,我们使用的高级IDE可以为我们执行一些重构,但这基本上就结束了。 我们不品尝我们自己的药。

让我们改变一下。 让我们看看如何将代码编写为:

  • 生成我们必须编写的无聊的重复性Java代码
  • 分析我们的代码以回答有关它的一些问题
  • 做一些代码处理和重构

好消息是,我们将使用一组库来实现所有这些功能:JavaParser和它的弟弟JavaSymbolSolver。

入门

好吧,这很简单:只需将JavaSymbolSolver添加到您的依赖项中即可。

什么是JavaSymbolSolver? 它是JavaParser的补充库,为它提供了一些非常强大的功能,这些功能对于回答关于代码的更复杂的问题是必需的。

JavaSymbolSolver依赖于JavaParser,因此您只需要添加JavaSymbolSolver,Maven或Gradle也会为您提供JavaParser。

我假设您知道如何使用Maven或Gradle。 如果您不喜欢,请停止阅读并开始学习!

使用javaparser生成代码

在几种情况下,您可能需要生成Java代码。 例如,您可能想基于一些外部数据生成代码,例如数据库架构或REST API。

您可能还需要将其他语言翻译成Java。 例如,我设计了用于生活的DSL,而当用户只能看到我为他们构建的DSL时,我经常在后台生成Java并将其编译。

有时候,您只想生成样板代码,就像我以前在使用JavaEE和所有这些层(谁能记住编写EJB的乏味?)时曾经使用过dp一样。

无论出于什么原因生成代码,都可以使用JavaParser。 JavaParser不会提出问题,它只是在帮助您。

让我们看看如何生成一个具有两个字段的类,一个构造函数和两个getter。 没什么特别先进的,但是它应该使您了解使用JavaParser进行代码生成的含义。

CompilationUnit cu = new CompilationUnit();

cu.setPackageDeclaration(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaparser_JavaParser生成,分析和修改Java代码 的相关文章

  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 如何连接hibernate和DB2

    我正在运行一个使用 struts 和 hibernate 的应用程序 我目前正在使用 Derby 数据库 现在我必须转向 DB2 数据库 请告诉我 我必须做什么配置 休眠配置文件 我必须设置任何类路径吗 多变的 我知道 DB2 有两个 ja
  • 如何使用 python 操作系统更改驱动器?

    我正在尝试更改当前目录C to Y 我试过 import os os chdir Y 但我不断收到错误消息 提示无法找到驱动器 本质上我正在寻找相当于 cd d cmd 中的命令 你确定吗Y 确实是有效的驱动器号吗 Try os chdir
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 如何使用python读取最后一行的特定位置

    我有一个太大的 txt 文件 并且有几行类似的行 如下所示 字1 字2 字3 字4 553 75 我对位置 4 值 感兴趣 即最后一行 553 75 我的文件文本 word1 word2 word3 word4 553 20 word1 w
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 如何在 Ivy 中使用不同的分类器下载多个 Maven 依赖项?

    我试图依靠Neo4j 服务器 jar http repo neo4j org content repositories snapshots org neo4j app neo4j server 1 5 SNAPSHOT neo4j serv
  • 如何在matplotlib中基于x轴更改直方图颜色

    我有根据 pandas 数据框计算出的直方图 我想根据 x 轴值更改颜色 例如 If the value is 0 the color should be green If the value is gt 0 the color shoul
  • 使用python中的mysql连接器正确从mysql数据库获取blob

    当执行以下代码时 import mysql connector connection mysql connector connect connection params here cursor connection cursor curso
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • python中打印字符串的长度

    有没有什么方法可以找到 即使是最好的猜测 Python中字符串的 打印 长度 例如 potaa bto 是 8 个字符len但 tty 上只打印 6 个字符宽 预期用途 s potato x1b 01 32mpotato x1b 0 0mp
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • 请求response.iter_content()获取不完整的文件(1024MB而不是1.5GB)?

    您好 我一直在使用此代码片段从网站下载文件 到目前为止 小于 1GB 的文件都很好 但我注意到 1 5GB 文件不完整 s is requests session object r s get fileUrl headers headers
  • 获取证书链

    我正在 Java 中使用 X509 证书 给定一个证书 是否可以在签名层次结构中找到所有其他证书 直到找到根证书 我有一个证书文件 带有 cer扩展名 我想提取父签名证书 我想继续查找该证书的父证书 直到获得最终的自签名根证书 我已经检查了
  • HashSet 与 LinkedHashSet

    它们之间有什么区别 我知道 LinkedHashSet 是 HashSet 的有序版本 维护一个跨所有元素的双向链接列表 使用此类代替 HashSet 当您关心迭代顺序时 当你迭代 HashSet 时 顺序是不可预测的 而 LinkedHa
  • django 组合对两个不同基本模型的查询

    我有两个不同的查询集 我想将两个查询集合并 q1 tbl nt 123 objects values list id value geometry filter restriction height exclude condition id
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • 如何正确使用Google Calendar API Events.Insert命令?

    所以我一直使用REST方法来调用Google的API 我需要将事件插入到我拥有 ID 的特定日历中 这是我发送的 POST 请求 地址 https www googleapis com calendar v3 calendars https
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp

随机推荐

  • 树莓派4B安装Pytorch, torchvision(附已编译安装包)

    树莓派4B安装Pytorch torchvision Install Pytorch Raspberry Pi 4B Linux raspberrypi 4 19 75 v7l 1270 SMP Tue Sep 24 18 51 41 BS
  • springboot集成swagger3+swagger-bootstrap-ui及使用详解

    1 引入 maven 依赖
  • Gradle中如何修改Springboot引入的依赖版本

    扫描漏洞升级 不知道各位是否遇到过以下问题 当下层项目将spring引入的某个依赖版本升级之后 上层项目只要指定了Springboot版本 那么还是会将这个版本改回去 比如 现在有两个Springboot项目A B B项目会调用A项目中的某
  • 玩一玩微信公众号开发(二) 管理凭据和自定义菜单

    管理access token access token介绍 在前面我们成功的使用了Spring Boot Web程序和微信对接 但是这仅仅是一个开始 我们还需要获取access token 也就是凭据 才能进行之后的工作 微信开发文档有如下
  • 大数据时代——生活、工作与思维的重大变革

    最近读了维克托 迈尔 舍恩伯格的 大数据时代 觉得有不少收获 让我这个大数据的小白第一次理解了大数据 作者是大数据的元老级先驱 放一张帅照 膜拜下 不过这本书我本人不推荐从头读一遍 因为书中的核心理念并不是特别多 可以看看我这篇博客 1 海
  • idea中git的简单使用及git分支

    这篇文章简单介绍了git 着重介绍了分支概念和idea中git的简单使用 提问题 git是啥 git的分支概念 idea中git的使用 git仓库 git命令 git安装 参考文章 git是个啥 分布式版本管理工具 git的前生今世 git
  • Solidity:源文件结构

    Solidity 源文件结构 SPDX License Identifier 如果源代码可用 则可以更好地建立对智能合约的信任 由于提供源代码总是涉及版权方面的法律问题 Solidity编译器鼓励使用机器可读的SPDX License Id
  • Synchronized详解

    目录 一 如何解决线程并发安全问题 二 synchronized原理详解 1 加锁的方式 2 synchronized底层原理 3 Monitor监视器锁 MonitorEnter指令获取monitor所有权过程 MonitorExit指令
  • java.lang.StackOverflowError: null(栈内存溢出)递归导致

    通常是递归导致 或者死循环 在方法里调用了自己 导致无限调用 很快就会报错StackOverflowError 例如 有些初学者会犯如下错误 这是service类 public void saveEntity Emp emp this sa
  • vue拖拽

    1 定义拖拽指令 2 使用 3 效果 4 完整代码
  • Spring Boot入门编写简单java代码

    这里我简单编写一个Hello World的代码 文章目录 1 设置访问端口 2 编写项目代码 1 设置访问端口 在yml文件中编写端口为8080 我们启动项目是的路径就是localhost 8080 server port 8080 2 编
  • ‘UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xff in position 0: invalid start byte‘成功解决

    今天在用pandas进行读取时出现了bug 出现这种情况的原因是 文件的编码不是 UTF8 编码的 而pandas读取文件时固定采用 UTF8 解码 解决方法是改为对应的解码方式 解决的方式有两种 第一种 可以查看你对应文件的编码格式 使用
  • 生成对角矩阵 numpy.diag

    给定对角线上元素 我想生成对角矩阵 在网上搜了一下 竟然都是numpy diagonal 这个函数的作用是提取给定矩阵的对角元素 当然不是我想要的 后来发现numpy diag才是生成对角矩阵的函数 所以写此文章记录之 import num
  • 【运维&测试】如何写好测试用例

    一 常用术语 按软件测试手段 黑盒 灰盒 白盒 其中白盒测试是三个当中技术难度最高的 测试方向 功能 性能 安全 测试点划分 兼容性 易用性 UI元素 二 测试用例是什么 是测试工作的核心 是一组在测试时输入输出的标准 是软件需求的具体对照
  • 微服务 tars php,TARS-PHP

    TARS PHP是针对PHP使用tars二进制协议 以及Tars平台整体运维 RPC等一系列能力的解决方案 它主要由如下的几个部分组成 Tars是基于名字服务使用 Tars 协议的高性能 RPC 开发框架 同时配套一体化的服务治理平台 帮助
  • Python调用java代码-两种方法

    使用的模块jpype 一 直接使用java内置函数 from jpype import startJVM 开启java虚拟机 getDefaultJVMPath 自动获取虚拟机路径 startJVM getDefaultJVMPath ea
  • 第六大晶圆代工厂商2021净利润大增593.3%

    3月29日 华虹半导体发布2021全年业绩公告 销售收入创历史新高 达16 31亿美元 较上年度增长69 6 净利润为2 31亿美元 较2020年上升593 3 公告指出 华虹半导体销售收入增长因付运晶圆增加及平均销售价格上涨所致 在原材料
  • 使用Navicat+Premium模型设计表之间关系图(1:n;n:n)

    一 设计E R图之间关系 1 打开Navicat Premium软件 开始设计表 2 设计表之间的关系 操作步骤 选中关系图标 将某张表的一个字段拖动到另外一张表的字段 设计表之间的关系 4 导出成png 5 保存模型 使用Navicat逆
  • winform 开发用什么框架_为什么自动化测试框架中优先用 Pytest而不是 Robot Framework?...

    Python 自动化测试框架 的优缺点对比 之前曾提问请教过 Pytest 和 Robot Framework 的优缺点对比 由于网上关于这方面的信息比较少 收到大家的反馈建议 十分感谢 现在是该总结一下了 欢迎大家一起交流探讨 在对比框架
  • javaparser_JavaParser生成,分析和修改Java代码

    javaparser 作为开发人员 我们经常鄙视手动进行重复工作的人员 我们认为 他们应该实现这一目标 尽管如此 我们还是进行与编码有关的所有活动 当然 我们使用的高级IDE可以为我们执行一些重构 但这基本上就结束了 我们不品尝我们自己的药