Lombok如何派上用场

java的 record 关键字是java 14中引入的一个新的语义特性。record 对于创建小型不可变的对象非常有用。另一方面,lombok 是一个java库,可以自动生成一些已知的模式为java字节码。尽管它们都可以用来减少模板代码,但它们是不同的工具。因此,我们应该在特定情况下使用更适合我们需求的工具。
在这篇文章中,我们将探讨各种使用情况,包括java record 的一些限制。对于每个例子,我们将看到lombok如何派上用场,并比较这两种解决方案。
小型不可变对象我们的第一个例子,将使用color对象。一个color由三个整数值组成,分别代表红、绿、蓝三个通道。此外,一个颜色会暴露出它的十六进制表示。例如,rgb(255,0,0)的颜色将有一个#ff0000 的十六进制表示。此外,如果两种颜色具有相同的rgb值,我们希望它们是相等的。
由于这些原因,在这种情况下选择 record 是非常合理的。
public record colorrecord(int red, int green, int blue) { public string gethexstring() { return string.format(#%02x%02x%02x, red, green, blue); }}同样地,lombok允许我们使用@value注解来创建不可变的对象。
@valuepublic class colorvalueobject { int red; int green; int blue; public string gethexstring() { return string.format(#%02x%02x%02x, red, green, blue); }}然而,从java 14开始,record将成为这些使用情况的最常见的方式。
透明的数据载体根据jdk增强建议(jep 395),record 是作为不可变数据的透明载体的类。例如,我们不能强迫前面例子中的colorrecord只暴露hexstring而完全隐藏三个整数字段。
然而,lombok允许我们自定义名称、访问级别和获取器的返回类型。让我们相应地更新colorvalueobject。
@value@getter(accesslevel.none)public class colorvalueobject { int red; int green; int blue; public string gethexstring() { return string.format(#%02x%02x%02x, red, green, blue); }}因此,如果我们需要不可变的数据对象,record 是一个很好的解决方案。
然而,如果我们想隐藏成员字段,只暴露使用它们进行的一些操作,lombok会更适合。
有许多字段的类我们已经看到了record 是如何以一种非常方便的方式来创建小型、不可变的对象的。让我们看看如果数据模型需要更多的字段,record 会是什么样子。在这个例子中,让我们考虑student的数据模型。
public record studentrecord( string name, long studentid, string email, string phonenumber, string address, string country, int age) {}我们已经可以猜到,studentrecord的实例化将很难阅读和理解,尤其是如果有些字段不是强制性的。
studentrecord john = new studentrecord( john, null, xxxx@qq.com, null, null, sh, 20);为了方便这些使用,lombok提供了一个[builder设计模式](/creational-design-patterns#builder)的实现。
为了使用它,我们只需要用@builder:来注释我们的类。
@getter@builderpublic class studentbuilder { private string name; private long studentid; private string email; private string phonenumber; private string address; private string country; private int age;}现在,让我们使用studentbuilder来创建一个具有相同属性的对象。
studentbuilder john = studentbuilder.builder() .name(john) .email(xxx@qq.com) .country(sh) .age(20) .build();如果我们对两者进行比较,我们可以注意到,使用构建器模式是有利的,可以带来更干净的代码。
总而言之,record 对于较小的对象来说是更好的。虽然,对于有很多字段的对象来说,缺乏创建模式会使lombok的@builder成为更好的选择。
可变数据我们可以使用java record 专门处理不可变的数据。如果上下文需要一个可变的java对象,我们可以使用lombok的@data对象代替:
@data @allargsconstructor public class colordata { private int red; private int green; private int blue; public string gethexstring() { return string.format(#%02x%02x%02x, red, green, blue); } }一些框架可能需要带有设置器或默认构造函数的对象。例如,hibernate就属于这种类型。当创建一个@entity时,我们必须使用lombok的注解或纯java。
继承性java record 不支持继承。因此,它们不能被扩展或继承其他类。另一方面,lombok的@value对象可以扩展其他类,但它们是最终的。
@valuepublic class monochromecolor extends colordata { public monochromecolor(int grayscale) { super(grayscale, grayscale, grayscale); }}此外,@data对象既可以扩展其他类,也可以被扩展。总之,如果我们需要继承,我们应该坚持使用lombok的解决方案。
结论在这篇文章中,我们已经看到lombok和java records是不同的工具,有不同的用途。此外,我们发现lombok更加灵活,它可以用于record 受到限制的场景。

Raychem瑞侃RW-175 热缩管特性
当前我国的插电式混合动力情况如何?
卷!合宙5元国产MCU—兼容主流F103,支持Keil开发
一根光纤无缝融合量子通信与传统光通信
LED防水电源的特性功能详细介绍
Lombok如何派上用场
双电瓶电动车的充电改进
多种无线协议的案例 网状网络对应用的影响
AI虚拟偶像 知识图谱制造富有生命感的人工智能
黑科技的智能魔镜让镜子也能成为一种智能化的显示屏
汽车发动机油泵壳零部件扫描方法工业产品设计抄数测绘服务
科技新闻精选:特斯拉宣布Robyn Denholm接替马斯克成董事长
Mini LED是什么?可以为液晶电视与显示器续命吗?
2021年智能手机市场会发生哪些新的变化
工业4.0时代突出的特点是什么
投资数字货币之前要牢记什么
三纬daVinciMini3D打印机评测 1999元值不值
Efinix将与三星合作开发Quantum eFPGA
锤子坚果pro最新消息,五年蜕变,锤子凭坚果Pro成618最大赢家
是德科技将与艾微视共建联合毫米波雷达实验室