使用Java成功生成代码的7个技巧

作为介绍,最近我有点安静,部分原因是我一直在忙于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通达信版弘历软件指标_中线公式指标(副图 通达信 贴图)明确文字提示,辅助判断中线走势下载_通达信公式...

中线公式指标(副图 通达信 贴图)明确文字提示,辅助判断中线走势下载详细说明第一股票公式网()告诉您:当前正要下载:中线公式指标(副图 通达信 贴图)明确文字提示,辅助判断中线走势下载 中线公式指标(副图 通达信 贴图)明确文字提示…

新巴巴运动网 项目第十一天

新巴巴运动网 项目第十一天 今天内容 购物车 创建购物车对象 加入购物车分析开发流程 加入购物车代码开发 同款商品合并(非登陆时、已登陆时) 去购物车结算分析开发流程 去购物车结算代码开发 创建购物车对象 购物项 Sku 是否有货 数量 购物车 List<购物项> 结果集 小计…

linux查看apache配置文件路径,linux 命令行下查看apache配置文件httpd.conf位置

如何用linux命令查看apache配置文件httpd.conf位置&#xff0c;说明如下输入命令httpd -V输出结果[rootMyServer ~]# httpd -VServer version: Apache/2.2.15 (Unix)Server built: Dec 15 2015 15:47:31Servers Module Magic Number: 20051115:25Server loaded: APR 1.3.9, APR…

qt linux webservice,Qt实现访问WebService

之前也许是因为根本不用的原因吧,,,根本没有想过Qt访问WebService的方式....要解决这个问题,因为Qt现行版没有提供直接访问的类库...首先是一些必备知识,我连的服务器是用VS2010建的只有 string helloworld() 和string getHello(string str)两个接口的iis服务器.针对这个我一共…

eclipse 插件教程_编写Eclipse插件教程–第1部分

eclipse 插件教程Eclipse是三个最受欢迎的Java开发IDE之一。 其成功的原因之一是其可扩展性。 对于任何知道该怎么做并且已经做到的人来说&#xff0c;编写eclipse插件都可以非常轻松快捷。 不幸的是&#xff0c;第一次在Eclipse中进行操作会非常耗时且令人沮丧。 Eclipse框架非…

mac cad石材填充图案_CAD电视背景墙画法步骤

在做室内装修设计的时候&#xff0c;电视背景墙往往是我们需要考虑的重点。1、打开平面布置图。2、复制一份&#xff0c;主要复制电视墙区域。3、矩形选框框选电视墙区域。4、删除选框意外的线条。5、旋转90度&#xff0c;让我们正对电视墙。6、在下方画基准线&#xff0c;作为…

HDU-3065 病毒侵袭持续中 AC自动机又是一板子!

病毒侵袭持续中 上一题是求出现多少病毒输出病毒序号&#xff0c;而这题输出每个病毒出现的次数。这题有字典树基础都能做出来&#xff0c;把叶子节点用相应的编号标记起来&#xff0c;匹配的时候遍历到叶子节点用一个数组把次数存起来就行了。 有了前几题的教训直接用静态树做…

街机linux有安卓好吗,Ubuntu下用xmame玩街机游戏

Ubuntu下用xmame玩街机游戏xmame是Windows下mame的Linux版&#xff0c;gxmame是xmame的图形化前端。mame号称是模拟效果最好、支持roms最多的模拟器&#xff0c;不过这个我就不清楚了。安装很简单sudoapt-getinstallgxmame会自动安装xmame和gxmame&#xff0c;安装后在Gnome游戏…

运行时间_运行一段时间报高压保护

请点击蓝字“阿理支持连”关注哦一起来探索空调的技术Discovery ●运行一段时间报高压保护某地区用户报修一台柜机运行一段时间(20分钟)后报E1高压保护&#xff0c;到底怎么回事呢&#xff1f;让我们一起来探讨一下吧&#xff01;一、案例描述这是一套定频柜机&#xff0c;E1高…

使用Lambda的装饰设计模式

随着Java中lambda的出现&#xff0c;我们现在有了一个新工具&#xff0c;可以更好地设计我们的代码。 当然&#xff0c;第一步是使用流&#xff0c;方法引用和Java 8中引入的其他简洁功能。 展望未来&#xff0c;我认为下一步是重新访问完善的设计模式&#xff0c;并通过功能性…

linux nohup /dev/null,nohup结合/dev/null

Linux重定向linux中经常需要后台执行程序&#xff0c;并将程序输出结果记录到本地文件&#xff0c;因此可选择>>或者>操作。追加模式>> 示例&#xff1a;echo ‘abc’ >>test.txt覆盖模式> 示例&#xff1a;echo abc>test.txt0标准输入、1标准输…

CodeForces 757B Bash's Big Day(线性筛)

题意&#xff1a;给你一个集合&#xff0c;让你找到一个最大的子集&#xff0c;使得子集里面的元素的gcd&#xff01;1&#xff0c;输出子集的元素的个数。 思路&#xff1a;先将集合里面的元素哈希&#xff0c;再线性筛。 PS&#xff1a;明明以前做过类似的题的&#xff0c;结…

macbook pro python开发_Mac打造python2 python3开发环境

最新版的MacOS Sierra默认带的python环境仍然为2.7.10&#xff0c;本文将介绍使用Brew安装python3.5并做简单的配置&#xff0c;打造python2&#xff0c;python3共存的开发环境直接尝试brew安装&#xff0c;提示需要执行brew link gdbmthatsitdeMacBook-Pro:~ thatsit$ brew in…

存进销系统 c语言大作业,c语言,程序设计大题,*纳税以系统(2)求法,求解...

话题&#xff1a;要求将2元兑换成有伍角贰角和壹角(每种都有),问有...问&#xff1a;要求将2元兑换成有伍角贰角和壹角(每种都有),问有几种兑换法?(c语言程...推荐回答&#xff1a;#include int main(void) { int i_5,i_2,i_1; for(i_50;i_5话题&#xff1a;题目:销售管理系统…

将2个字符写入单个Java char

这是创建超低延迟的Chronicle FIX-Engine时使用的另一个好技巧。 在从字节流中读取数据时&#xff0c;如果可能的话&#xff0c;将数据存储在char而不是将其读取到String效率更高。 &#xff08;至少您要避免创建String对象&#xff0c;尽管可以通过使用缓存或使用CharSequenc…

时间管理的6句话

早起 避免开会 避免多任务&#xff0c;保持单进程集中注意力、高效工作&#xff0c;每天最多4小时 你没空时不会做的事情&#xff0c;有空了也不会做 划分任务的优先级&#xff0c;不要把急切当作重要 转载于:https://www.cnblogs.com/easonw/p/6286977.html

h5页面保存img_一文彻底解决HTML5页面中长按保存图片功能

本文详细介绍了如何在H5中实现长按保存图片的功能。长按保存图片是现在一些宣传页H5中很常见的需求&#xff0c;但是js没有这样的能力&#xff0c;所以要么借助android或ios的原生能力,要么用canvas自己画一个(截屏)&#xff0c;相比较原生成本太高&#xff0c;且必须依赖于app…

c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联

摩路由M1作为Moto旗下首款路由器&#xff0c;自去年发布以来&#xff0c;备受瞩目。几个月下来&#xff0c;借着强大的信号覆盖和穿墙能力&#xff0c;赢得了不少用户的认可&#xff0c;甚至推崇。不久前发布的摩路由M2&#xff0c;在M1的基础上进行了升级&#xff0c;功能和配…

在fedora下面安装ftp服务器

Fedora版本&#xff1a;Fedora 12 1. 安装vsftp [java] view plaincopy #yum install vsftpd 一路yes&#xff0c;最后提示安装成功。 2. 配置vsftpd.conf。 [java] view plaincopy #vi /etc/vsftpd/vsftpd.conf 将vsftpd.conf文件中的主要设置如下&#xff1a; [java] view …

jenkin swindows启动_windows启动过程

展开全部认真看完这个也许你会有收获的&#xff1a;Windows启动e68a84e8a2ad62616964757a686964616f31333231626165过程介绍相信不少人碰到过装了个什么东西之后&#xff0c;重启Windows就发现起不来了。所以&#xff0c;想把Windows启动过程中作了些什么事情&#xff0c;分哪些…