record 替代 lombok, 我觉得不行

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

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类和对应的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值