如何使用java代码生成_使用Java成功生成代码的7个技巧
如何使用java代码生成
作为介绍,最近我有点安静,部分原因是我一直在忙于Chronicle-FIX的工作 。 这是Chronicle-Enterprise套件中的一个新的超低延迟库,我们证明了该库可以在低个位数微秒内解析和存储消息。 当然,它利用了我们的开源产品Chronicle-Queue , Chronicle-Network和Chronicle-Bytes 。
我们实现的低延迟的秘密之一是,每个实现都可以完全基于其所需的架构来生成自定义的修复引擎。 为了实现这一点,我构建了很多代码生成代码。
因此,我想我将分享在此过程中学到的一些经验教训。
1.使用代码生成库
到目前为止,这是最重要的提示。 我很难强调这有多重要,以及您将节省多少时间和复杂性。 您真的不想在创建字符串文字时试图弄乱代码中的正确间距或加倍和三倍转义的引号引起麻烦!
我使用了JavaPoet ,它是开源的(Apache 2),非常好。 它处理了我想做的所有事情,包括一些非常复杂的泛型。 它唯一不支持的事情就是声明静态导入,但这很容易解决,对于一个优秀的库来说,它并不重要。
JavaPoet将Java代码分解为对象:TypeSpec(类或接口),MethodSpec(方法),FieldSpec(字段),CodeBlocks(代码块)。 它巧妙地为基于printf模式的语句(代码行)提供了丰富的语法。 您会发现,遵循这种范式将使您拥有更简洁,更简洁的代码,而不是自己动手编写代码,这很容易使这类问题的过程编码路线更加混乱。
2.首先手动编写代码
在没有先编写示例代码的情况下,请勿尝试和生成代码。 通过后视镜进行编码不是一件容易的事,如果您在进行过程中对其进行处理,则变得很复杂。
首先花一点时间手工编写代码,然后为其生成代码。
另外,您将希望产生尽可能最佳的代码,这只有在您首先花费时间和精力手工编写代码的情况下才能完成。
3.生成尽可能少的代码
仅生成所需数量的代码。 因此,例如,如果所有生成的类都需要实现某个方法,请使用可以由生成的代码调用的帮助程序类,而不是多次生成该方法。 或者,获取您的代码以使用基类上的方法扩展静态基类。
4.确保可以一次性吹走所有生成的代码
不要将静态代码与生成的代码混合使用。 您要做的是拥有com.test.generatedcode.xx.xx
类的软件包。 在每次测试/开发运行结束时,您都应该能够删除整个文件夹com/test/generatedcode
,这意味着该文件夹中根本没有静态代码。
您会发现以这种方式安排代码将使测试周期变得更快。
5.从少量可验证的代码开始
代码生成的重点通常是产生大量代码。 很难测试您生成的代码是否正确。 因此,从一个小而复杂的示例开始,您可以通过阅读代码进行检查,并为其提供测试用例。
希望以后的情况会更多。
6.生成测试用例
如第5点所述,很难在所有情况下验证您的代码生成器是否正确。 因此,您应该尝试将测试用例作为所生成代码的一部分进行生成。 然后,您可以从生成器生成许多偏斜的复杂代码,并对其进行测试。
7.冗长
从本质上讲,生成代码的代码可能很难阅读和理解。 代码生成代码永远不必太快,因此不必担心使其变得冗长。 使用大量评论,但更重要的是,尝试使其尽可能明确,以便您可以在一年内回顾它并仍然可以对其进行维护。
翻译自: https://www.javacodegeeks.com/2015/12/7-tips-successful-code-generation-java.html
如何使用java代码生成
如何使用java代码生成_使用Java成功生成代码的7个技巧相关推荐
- 使用Java成功生成代码的7个技巧
作为介绍,最近我有点安静,部分原因是我一直在忙于Chronicle-FIX的工作 . 这是Chronicle-Enterprise套件中的一个新的超低延迟库,我们证明了该库可以在低个位数微秒内解析和存 ...
- java转账_使用Java模拟银行账户存、取款、转账功能
半枯 package bank;import java.util.Scanner;/** * 1.建立一个银行账户类(Acount),具有建立新帐号.查询余额.存款.取款.转账 * 即从本账户把钱转给 ...
- java掌握_掌握Java 11的Constantdynamic
java掌握 为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集. Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中. 简而言之,通过 ...
- 易语言 java支持_开源Java客户端可以连接易语言服务器
我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...
- 学习java前_学习java之前
原标题: 学习java之前 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 学习java之前 2.1认识JD ...
- java 示例_最佳Java示例
java 示例 什么是Java? (What is Java?) Java is a programming language developed by Sun Microsystems in 199 ...
- mysql连接java程序_实现Java连接mysql
Java连接mysql数据库,代码经过运行准确无误. 下面为实例----> 用数据库操纵工具(例: SQLyogEnt)操纵mysql建表,或dos下建,如下: 数据库名:scutcs 表名:s ...
- 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...
- 图书借阅管理用java实现_用java实现图书管理系统。 - 惊觉...
在学完java基础篇的时候,安排做了一个综合版的java基础项目,可以把之前学到的知识综合运用. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 运用这种设计模式的优点: MV ...
最新文章
- js或css文件后面的参数是什么意思?
- vue项目中如何引入ElementUI
- matlab 图像读取长宽_计算机视觉学习笔记1 图像读取显示和尺寸变换
- [leetcode]84. Largest Rectangle in Histogram c语言
- JavaScript删除数组里的某个元素
- kotlin-2(IdeaIU-2018.2汉化破解)
- Python训练文本情感分析模型
- gRPC Mock Server
- 一次量产恢复U盘真实容量的操作过程(安国主控芯片)
- adb 命令行导出Android APP数据库.db文件
- android studio日志不打印,Mac 下 Android Studio 不打印日志的解决办法
- 挺带劲!这款免费开源的监控系统真强大~
- Git学习笔记使用记录
- 加密通信(三):CA证书
- APP第一次走引导页面的方法
- Arduino与Proteus仿真实例-74LS378触发器驱动仿真
- 欧拉函数互质数的个数
- Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
- GEE遥感云大数据在林业中的应用
- linux下怎么根据端口号杀死进程
热门文章
- P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】
- P3041-[USACO12JAN]Video Game G【AC自动机,dp】
- 欢乐纪中A组周六赛【2019.3.23】
- 【jzoj】2018/2/2 NOIP普及组——D组模拟赛
- 【二分】买礼物的艰辛
- 操作系统复习笔记 07 Process Synchronization 进程同步
- Java 0xffffffff隐式类型转换的坑
- JavaFX图表(四)之面积图
- 漫画:什么是一致性哈希
- (十一)Spring 基础注解(对象创建相关注解、注入相关注解)