面向对象代码

代码生成是减少无聊任务的不健康负担的一种常用方法,这些任务常常使我们急切地对代码苦恼。 我见过的许多代码生成框架都使用模板替换重复方法,在该模板中,您编写了模板,以了解生成的代码文件的外观,然后替换某些关键字并重复其他部分以生成所需的特定文件。

这种让我烦恼的方法的问题是,要编译生成的代码真的很难知道生成的代码是否可以工作。 您可能已经更改了一个类的名称,并且突然生成的代码无法构建。 为了解决此问题, 我启动了一个名为CodeGen的项目 , 该项目旨在完全面向对象,以便您可以从模板到可执行代码的所有过程中受益于类型安全。 生成器的主要用例是Speedment软件 ,但它可以用于各种项目。

考虑以下代码:

final Generator generator = new JavaGenerator();final File file = File.of("org/example/Foo.java").add(Class.of("Foo").public_().add(Field.of("x", DOUBLE_PRIMITIVE).final_()).add(Field.of("y", DOUBLE_PRIMITIVE).final_()).add(Field.of("z", DOUBLE_PRIMITIVE).final_()).call(new AutoConstructor()).call(new AutoSetGetAdd()).call(new AutoEquals())).call(new AutoJavadoc()).call(new AutoImports(generator))
;

应用程序的模型树是使用bean构建的。 可以将新方法和成员变量添加到树中,以创建同一类的变体。

当要呈现代码时,可以轻松地将其传递给生成器类。

String code = generator.on(file).get();

生成的代码如下所示:

/*** Write some documentation here.*/
package org.example;import java.util.Optional;/*** @author You name here*/
public class Foo {private final double x;private final double y;private final double z;/*** Initializes the Foo component.** @param x  the x* @param y  the y* @param z  the z*/public Foo(double x, double y, double z) {this.x = x;this.y = y;this.z = z;}/*** Returns the value of x.** @return  the value of x*/public double getX() {return x;}/*** Sets a new value for x.** @param x  the new value of x*/public void setX(double x) {this.x = x;}/*** Returns the value of y.** @return  the value of y*/public double getY() {return y;}/*** Sets a new value for y.** @param y  the new value of y*/public void setY(double y) {this.y = y;}/*** Returns the value of z.** @return  the value of z*/public double getZ() {return z;}/*** Sets a new value for z.** @param z  the new value of z*/public void setZ(double z) {this.z = z;}/*** Generates a hashCode for this object. If any field is* changed to another value, the hashCode may be different.* Two objects with the same values are guaranteed to have* the same hashCode. Two objects with the same hashCode are* not guaranteed to have the same hashCode."** @return  the hash code*/@Overridepublic int hashCode() {int hash = 7;hash = 31 * hash + (Double.hashCode(this.x));hash = 31 * hash + (Double.hashCode(this.y));hash = 31 * hash + (Double.hashCode(this.z));return hash;}/*** Compares this object with the specified one for equality.* The other object must be of the same type and not null for* the method to return true.** @param other  the object to compare with* @return  {@code true} if the objects are equal*/@Overridepublic boolean equals(Object other) {return Optional.ofNullable(other).filter(o -> getClass().equals(o.getClass())).map(o -> (Foo) o).filter(o -> this.x == o.x).filter(o -> this.y == o.y).filter(o -> this.z == o.z).isPresent();}
}

每个组件都是作为接口类对实现的,因此您可以动态更改实现,而无需重写系统的其他部分。

希望这对其他人有帮助!

翻译自: https://www.javacodegeeks.com/2016/02/object-oriented-approach-code-generation.html

面向对象代码

面向对象代码_面向对象的代码生成方法相关推荐

  1. 每行代码都有注释释的java面向对象代码_每行代码都有注释释的java面向对象代码...

    每行代码都有注释释的java面向对象代码 [2021-02-02 01:52:34]  简介: vue如何注释 2020-11-18 vue注释的方法:1.html注释,代码为[]:2.[pug(ht ...

  2. python面向对象代码_两百行代码搞定!使用Python面向对象做个小游戏

    大家好,欢迎来到Python实战专题. 我们今天同样实现一个小游戏,这个小游戏非常有名,我想大家都应该玩过.它就是tic tac toe,我们打开chrome搜索一下就可以直接找到游戏了. 由于我们使 ...

  3. java面向对象电梯运行代码_面向对象编程总结——多线程电梯

    最近的三周面向对象的作业是电梯问题.主要是对多线程编程的一种训练.主要还是对生产者--消费者模型的使用的理解.作业分成了三个阶段,第一个阶段是FIFO调度策略的电梯.第二个阶段是可捎带的电梯设计,第三 ...

  4. Python 进阶_OOP 面向对象编程_实例属性和方法

    目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可 ...

  5. Python 进阶_OOP 面向对象编程_类属性和方法

    目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ...

  6. java面向对象程序_面向对象编程基础(java)

    面向对象编程基础 1.1 面向对象概述 在程序开发初期,大家使用的是结构化开发语言,也就是面向过程(opp),但随着市场需求剧增,软件的规模也越来越大,结构化语言的弊端也暴露出来. 开发周期无休止的拖 ...

  7. php面向对象代码_PHP面向对象之抽象类详解(代码实例)

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  8. apg 代码_正则表达式的替代方法:apg-exp

    apg 代码 Sebastian Seitz和Almir Bijedic对此文章进行了同行评审. 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态! 几乎没有程序员会时不时使 ...

  9. 面向对象程序设计_面向对象的程序设计(续)

    写在前面:这里是续之前的那篇文章,同样源于本人的个人博客,在知乎为了一个备份 这里是7-10章 Chapter 7: Arrays 数组 记得在C语言里面,也有提到过数组这个概念 记得RT也说过这玩意 ...

最新文章

  1. 用友发布U8 All-in-One引爆中小企业全面信息化
  2. FATE 集群部署 step2
  3. python 数据类型 、运算符
  4. PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?
  5. 特征图注意力_从数据结构到算法:图网络方法初探
  6. php函数方法,基于PHP函数的操作方法
  7. 《深入浅出通信原理》读书笔记系列1-第2章 信号与频谱
  8. vc2012编译speex (编译通过)
  9. VS2017各版本区别
  10. java上传图片裁剪_上传图像之裁剪
  11. 知道ip获取计算机密码,知道iP地址怎么获取密码
  12. Dubbo是什么?能做什么?架构图?
  13. 肖明计算机网络答案,袭肖明
  14. Android转场动画(View Activity ARouter)
  15. 基于Faster-RCNN的目标检测(TF版) 步骤与问题解决办法
  16. 写高效的java代码
  17. NORDIC Thing:52 Android App 学习之二:手机 App 蓝牙服务发现及数据读取
  18. html5网页综合案例制作,网页开发与制作 HTML5页面元素及属性 2-21综合案例(6页)-原创力文档...
  19. epoll 主从反应堆模式代码实现
  20. 不使用架构工具在vscode中操作vue,扩展添加vue.js.devtools(Hollo案例)

热门文章

  1. YBTOJ:彩色圆环
  2. P4841,jzoj3303-城市规划【NTT,多项式求逆,dp】
  3. P1297-[国家集训队]单选错位【期望概率】
  4. P1368-工艺【最小表示法】
  5. 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
  6. 图论复习——最小生成树MST
  7. mybatis源码阅读(六) ---StatementHandler了解一下
  8. JavaFX UI控件教程(八)之Choice Box
  9. 优秀学生专栏——孙振涛
  10. 我是一位老师,讲课是我的乐趣,可是……