当前位置: 首页 > article >正文

record 替代 lombok, 我觉得不行

record 怎么用 🚒...

    • record
      • 可替代 lombok 否?
      • 提供setter方法吗?
      • 算浅拷贝吗?
    • 总结

你要适应我 坚定我 我才能发挥我百分百的甜

record

record是Java 14中引入的一个新特性,它是一种类似于类的结构,但用于表示不可变数据。相比于传统的Java类,record在定义数据类时更为简洁、易读和易用。

record通常用于表示一些轻量级的数据类型,如DTO(数据传输对象)、VO(值对象)、POJO(简单Java对象)等。record的定义方式类似于类,但使用关键字“record”代替了“class”,并可以使用“final”关键字来保证实例的不可变性。

下面是一个简单的record的例子:

record Person(String name, int age) {}

上面这个record定义了一个名为Person的数据类,它有两个属性:name和age。通过这个定义,我们可以很方便地创建一个Person对象:

Person person = new Person("Tom", 20);

可以看到,创建Person对象的方式和创建普通Java对象的方式非常相似。但是,与普通Java对象不同的是,我们不能直接修改record对象的属性值。如果想要修改对象的属性,我们需要创建一个新的对象。

此外,record还提供了一些其他的有用特性,例如自动实现equals()、hashCode()和toString()方法等。在实际开发中,使用record可以帮助我们更好地组织代码,提高代码的可读性和可维护性。

可替代 lombok 否?

使用record可以让我们避免手写getter和setter方法。实际上,record可以自动为每个属性生成对应的getter方法,这些方法可以通过属性名直接调用,如person.name()。而且,record还可以自动生成equals()、hashCode()和toString()等方法的实现,这些方法通常需要我们手动编写。

提供setter方法吗?

record是一种不可变的数据类,因此它并没有提供默认的setter方法。如果我们需要修改record对象的属性值,我们需要创建一个新的对象。比如,我们可以通过使用withXxx()方法来创建一个新的record对象,该方法会返回一个新的对象,同时修改指定的属性值,例如:

record Person(String name, int age) {}

Person person = new Person("Tom", 20);
Person newPerson = person.withAge(21); // 创建一个新的Person对象,同时修改年龄属性为21

在上面的例子中,我们通过withAge()方法来创建一个新的Person对象,同时修改年龄属性为21。这个新的Person对象与原来的对象不同,它是一个全新的对象,原来的对象并没有被修改。需要注意的是,withXxx()方法并不是在原来的对象上进行修改,而是创建一个新的对象,因此record仍然是不可变的。

算浅拷贝吗?

如果在record的构造函数中使用了另一个类的对象,那么在调用withXxx()方法修改属性时,会复制该对象的引用。这种情况下,withXxx()方法的行为就类似于浅拷贝。也就是说,新对象和原对象共享同一个引用类型属性的值,修改其中一个对象的该属性值也会影响到另一个对象。这是因为在Java中,对象之间的赋值是基于引用的,复制引用类型属性的时候,只是复制了对象的地址,而不是对象本身。

需要注意的是,即使在record的构造函数中使用了另一个类的对象,record本身仍然是不可变的。也就是说,修改record对象的属性值仍然需要创建一个新的对象,同时复制原对象的属性值并修改指定的属性值。只不过,如果原对象包含引用类型的属性,修改该属性值时需要注意共享对象的情况。

总结

相比于传统的Java类,使用record可以让我们更加专注于数据本身,而不是getter和setter方法的实现。同时,它还可以减少代码的冗余,提高代码的可读性和可维护性。值得注意的是,虽然record提供了许多便利的功能,但并不适用于所有的情况,有些情况下我们仍需要手写Java类和对应的方法。


http://www.kler.cn/a/7201.html

相关文章:

  • 游戏如何应对内存修改
  • Educational Codeforces Round 164 (Rated for Div. 2)(A~E)
  • 计算机网络:运输层 —— TCP的流量控制
  • 针对股票评论的情感分类器
  • WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇
  • Python作业05
  • 58-Map和Set练习-LeetCode692前k个高频单词
  • AIGC之Stable Diffusion 提示词学徒库
  • 「ML 实践篇」回归系统:房价中位数预测
  • 使用机器学习opencv看手相
  • 嵌入式学深度学习:1、Pytorch框架搭建
  • 暴刷 SQL 导航
  • 探索五大机器学习技术及其应用
  • SSM整合
  • spring框架注解(纯注解)
  • c++类和对象
  • 通信协议-IIC协议
  • 政务服务一网通办建设方案(ppt)
  • 自己写gpt的软件教程-国内最好的chatgpt软件
  • 西北乱跑娃 -- 全栈开发新手必看客户端与服务的关系
  • 计算机网络 常见网卡信息
  • Solidworks学习一
  • SpringCloud整合Feign基本使用及源码分析-02
  • 团体程序设计天梯赛--5分题
  • ThreeJS-平行光物体投影(十九)
  • 画栋雕梁:定制投资体系4——持有、波动与卖出