关于 @Builder 和 @SuperBuilder

本文介绍了Lombok库中的@Builder和@SuperBuilder注解,展示了如何通过这两个注解简化对象构造,特别是当面对继承结构时。@Builder用于创建实例,而@SuperBuilder解决了子类构造父类属性的问题,并探讨了自定义方法名和toBuilder特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先了解@Builder

引入依赖(Maven结构)

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

创建一个类

@Builder
public class Ming {
    private Integer age;
    private String name;
}

这里使用@Builder注解,就可以在创建新实例的时候这样写:

Ming mingA = Ming.builder().build();
Ming mingB = Ming.builder()
  	.age(11)
  	.build();
Ming mingD = Ming.builder()
  	.age(11)
  	.name("小明")
  	.build();

可以看到,我们只要写一个@Builder注解,有如下好处:

1 一个注解代替若干参数情况下的构造函数,缩减了构造类的代码量
2 通过Builder构造的方式,即 .属性名(值) 这样的方式,比直接使用构造函数的方式更加具备可读性,比频繁使用set方法的方式更加简洁。

了解@SuperBuilder

@SuperBuilder解决了什么样的问题

将例子中的Ming这个类的成员属性放到父类当中:

public class Person {
    private Integer age;
    private String name;
}

@Builder
public class Ming extends Person{
}

这个时候,我们之前的调用的 .builder 都会报错,这是因为@Builder并不支持父类成员属性的构造@SuperBuilder注解的出现,就是用来解决这个问题

@SuperBuilder
public class Person {
    private Integer age;
    private String name;
}

@SuperBuilder
public class Ming extends Person{
}

这样子类就可以正常获取到父类的成员属性进行builder构造了。

@SuperBuilder(toBuilder = true)用法

toBuilder属性默认关闭,如果开启,则所有的父类应该也要开启,效果如下:

Ming mingD = Ming.builder()
      .age(11)
      .name("小明")
      .build();
Ming mingF = mingD.toBuilder().name("猪").build();
System.err.println(mingD.toString());
System.err.println(mingF.toString());

在这里插入图片描述
通过设置true所有的类实例会拥有toBuilder方法

这是一个类似深拷贝的一个方法,不会改变原有实例的属性生成一个新的实例。在toBuilder中有赋值的属性则会改变为赋值属性没有赋值的以调用的实例中的值为准

@SuperBuilder(buildMethodName = “execute”, builderMethodName = “helloWorld”, toBuilder = true) 用法

这个用法其实没什么意思,就是自定义方法名,不展开赘述。

注意

注意补充构造方法

使用@Builder或@SuperBuilder注解时,不会默认创建空参构造函数,如果你有额外使用空参构造函数或全参构造函数的需求,需要在子类和父类都加上以下注解:

@AllArgsConstructor //全参构造函数
@NoArgsConstructor //空参构造函数

@SuperBuilder(toBuilder= true) 不生效

使用A.builder().父类B属性().build()报错,首先检查

A 类 要加@SuperBuilder(toBuilder= true)
父类B 同时也要加 @SuperBuilder(toBuilder= true)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值