JAVA实体需要加@Builder吗(构建器模式)

对于JAVA中两种设置属性值的方式有什么区别,这里做下记录

问题一:JAVA实体什么时候需要加@Builder?
在Java中,@Builder 注解通常用于简化创建对象时构造函数的调用。当你有一个实体类(Entity)或数据传输对象(DTO)拥有多个字段,并且你希望以一种更简洁的方式创建其实例时,@Builder 注解就显得非常有用。特别是当使用构造器或setter方法逐个设置字段值显得冗长或容易出错时。

问题二:加上@Builder的作用是什么?
加上@Builder注解的作用是为你的类自动生成一个构建器(Builder)类。这个构建器类提供了一种链式调用的方式来设置对象的属性,并最终通过调用.build()方法来创建对象实例。这种方式使得对象创建更加简洁和易于阅读,特别是在对象有多个属性需要设置时。

问题三:加上@Builder之后,同时也加上@Data注解的话,还能通过new User()对象后,对象.set()方法来设置属性吗?
是的,你可以同时使用@Builder和@Data注解。@Data注解来自于Lombok库,它会自动为你的类生成getter、setter、equals()、hashCode()和toString()方法。这意味着,即使你使用了@Builder注解,你的类仍然会拥有传统的setter方法。

因此,你可以通过new User()创建对象后,使用.set()方法来设置属性,或者你也可以使用构建器模式来创建和设置对象。

@Builder的使用示例

import lombok.Builder;  
import lombok.Data;  
  
@Data  
@Builder  
public class User {  
    private String name;  
    private int age;  
    private String email;  
  
    // 这里不需要显式编写getter、setter方法,Lombok会为我们自动生成  
  
    public static void main(String[] args) {  
        // 使用构建器模式创建对象  
        User user1 = User.builder()  
                .name("Alice")  
                .age(30)  
                .email("alice@example.com")  
                .build();  
  
        // 使用传统的setter方法创建并设置对象  
        User user2 = new User();  
        user2.setName("Bob");  
        user2.setAge(25);  
        user2.setEmail("bob@example.com");  
  
        // 验证对象是否按预期设置  
        System.out.println(user1);  
        System.out.println(user2);  
    }  
}

其中 使用了构建器模式来创建并设置user1的属性。然后,我们使用传统的setter方法来创建并设置user2的属性;在日常开发中,使用那种模式,依赖于关注的重点在哪。

问题:那具体什么时候用普通的对象setter来设置属性值,什么时候使用@Builder的链式调用来设置属性值?

使用普通的对象setter来设置属性值

  • 当对象创建后需要逐步构建时:如果你在一个较长的过程中逐步构建对象,并且可能需要根据条件设置不同的属性,那么使用setter方法可能更灵活。
  • 当需要重用已创建的对象时:如果你已经创建了一个对象实例,并且稍后需要修改其属性,那么setter方法显然是必需的。
  • 当与遗留代码或第三方库交互时:如果你的代码需要与不使用Lombok或构建器模式的遗留代码或第三方库交互,那么使用setter方法可能更兼容。
  • 当需要更细粒度的控制时:在某些情况下,你可能需要在设置属性之前或之后执行额外的逻辑(如验证、计算等)。在这种情况下,自定义的setter方法提供了更多的控制。

使用@Builder的链式调用来设置属性值

  • 当对象创建时所有属性都需要设置:如果你的对象在创建时就需要设置所有或大部分属性,并且这些属性在对象生命周期内不会改变(或很少改变),那么使用构建器模式可能更清晰、更简洁。
  • 当需要提高代码可读性时:构建器模式的链式调用可以创建出非常流畅和易于阅读的代码,特别是在设置多个属性时。
  • 当与Lombok或其他现代Java库集成时:如果你的项目已经在使用Lombok或其他现代Java库,并且你希望利用它们提供的便利功能(如自动生成getter、setter、构建器等),那么使用@Builder注解是一个很好的选择。
  • 当需要避免在构造函数中传递大量参数时:如果你的对象有很多属性,并且你希望避免在构造函数中传递大量参数(这可能会导致构造函数难以阅读和维护),那么使用构建器模式可能是一个更好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执键行天涯

码你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值