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注解是一个很好的选择。
  • 当需要避免在构造函数中传递大量参数时:如果你的对象有很多属性,并且你希望避免在构造函数中传递大量参数(这可能会导致构造函数难以阅读和维护),那么使用构建器模式可能是一个更好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550694.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境下的JDK安装详解

JDK安装 在 一些操作系统上,有时会自带 JDK(一般都是自己卸载再重新装一个)。您可以通过以下命令检查: ##看看是否有自带的jdk java -version rpm -qa | grep -i java如果已经安装了 JDK,可以卸载后再重新安装。 r…

Parallels Desktop19官方中文版10月最新

如何使用 Parallels Desktop 在 Mac 上运行虚拟机 Parallels Desktop 是一款强大的虚拟机软件,允许 Mac 用户在 macOS 上方便地运行 Windows 和其他操作系统。这款软件尤其适合开发者、设计师以及任何需要使用不同操作系统的用户。本文将为新手用户提供一步一步的指…

Devicenet从站数据 转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关用DEVICENET协议采集数据 3 5 用PROFINET IO协议转发数据 4 6 案例总结 7 1 案例说明 设置网关采集Devicenet从站设备数据把采集的数据转成profinet IO协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协…

javacpp调用c++动态库

1、准备条件安装Visual Studio2022 Visual Studio下载安装-CSDN博客 2、使用 Visual Studio导出动态库 Visual Studio导出动态库-CSDN博客 会用到上面文章中的 pch.h、mycpp.dll和mycpp.lib 3、新建文件mycpp.h,把pch.h中的内容复制到mycpp.h,把mycpp.h中的 #include &…

【华为HCIP实战课程三】动态路由OSPF的NBMA环境建立邻居及排错,网络工程师

一、NBMA环境下的OSPF邻居建立问题 上节我们介绍了NBMA环境下OSPF邻居建立需要手动指定邻居,因为NBMA环境是不支持广播/组播的 上一节AR1的配置: ospf 1 peer 10.1.1.4 //手动指定邻居的接口地址,而不是RID peer 10.1.1.5 area 0.0.0.0 手动指定OSPF邻居后抓包查看OSP…

51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时钟模块光照传感器红外传感器温度传感器LED等模块构成。适用于教室灯光全自动控制、教室节能灯控制、教室智能照明等相似项目。 可实现功能: 1、LCD1602实时显示时间、温度、光照强度等信息 2、光照强度传…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十三章 Linux连接档概念

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

头戴式蓝牙耳机哪个品牌比较好?西圣、声阔、QCY热款实测性能PK

头戴式蓝牙耳机凭借其卓越的音质表现、沉浸式的听音体验以及出色的降噪功能,成为了众多音乐爱好者和通勤人士的首选,随着技术的不断进步,西圣、声阔、QCY等知名品牌纷纷推出了各具魅力的头戴式蓝牙耳机产品,面对它们家的耳机&…

哪个待办事项提醒软件推荐?待办事项提醒软件哪个合适?

在快节奏的现代生活中,我们每个人每天都会被各种待办事项所包围。从工作计划到个人生活,从学习任务到家庭琐事,这些事项往往繁杂且紧急,稍不留神就可能错过重要的截止日期。因此,选择一款合适的待办事项提醒软件&#…

图片四个角怎么能做成圆弧角?这几种制作方法操作起来很简单!

图片四个角怎么能做成圆弧角?在当今这个视觉内容爆炸的时代,图像不仅仅是信息的载体,更是情感交流的桥梁,深刻地渗透进我们的日常生活,然而,一个微妙却常被边缘化的观察是,传统图片那尖锐的直角…

网站建设中,SSL协议、TLS协议,分别是什么,有什么区别?

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全中用于保护数据传输的两个核心协议。它们在基本功能、握手过程以及安全性等方面有所不同。具体分析如下: 基本功能 SSL:提供加密、认证…

认识联合体和枚举

目录 一.联合体 1.联合体的声明 2.联合体的特点 (一)内存共享 (二)大小等于最大成员的大小 另一特殊情况: (三)一次只能使用一个成员 3.联合体相比较于结构体 (一)内存分配 …

OpenCV-图像拼接

文章目录 一、基本原理二、步骤三、代码实现1.定义函数2.读取图像3.图像配准(1).特征点检测(2).特征匹配 4.透视变换5.图像拼接 四、图像拼接的注意事项 图像拼接是一种将多张有重叠部分的图像合并成一张无缝的全景图或高分辨率图…

【Python】Beaker:轻量级缓存与会话管理的解决方案

Beaker 是一个简单、灵活的 Python 库,主要用于缓存管理和会话管理。作为一个开源项目,Beaker 提供了多种缓存存储后端,帮助开发者在应用中高效管理缓存数据,同时支持会话存储,适合 Web 应用中的用户状态管理。其轻量级…

AIGC: 从两个维度快速选择大模型开发技术路线

在当今人工智能飞速发展的时代,大模型开发技术路线的选择至关重要。本文将从两个维度出发,为大家快速介绍不同的大模型开发技术路线,帮助你在开发过程中做出明智的决策。 一、两个维度解析 传入大模型的信息 低要求:传入的信息相…

RabbitMQ 高级特性——TTL

文章目录 前言TTL设置消息的 TTL设置队列的 TTL 前言 对于前面讲到的重试机制中,当确认策略为 MANUAL 手动确认的时候,如果消费者出现了程序逻辑错误,那么消息就无法被争取处理,那么就会执行 basicNack 方法,如果我们…

Java 网络编程和多线程

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻实现客户端和服务端交互1. 基本概念2. 常用类3. 简单示例客户端代码服务器代码 4. 注意事项 👉&#x1f3…

文献阅读——电力系统安全域边界通用搜索模型与近似方法

文章标题 DOI:10.13334/j.0258-8013.pcsee.190884 ©2020 Chin.Soc.for Elec.Eng. 4411 文章编号:0258-8013 (2020) 14-4411-19 中图分类号:TM 74 电力系统安全域边界通用搜索模型与近似方法 姜涛,李晓辉,李雪*&a…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台,支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型,帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网,注册并登录账号。 进入开发者平台&…

常见字符函数和字符串函数(下)

1. strncpy 函数的使用 将源的前 number 个字符复制到目标。如果在复制 num 个字符之前找到源 C 字符串的末尾(由 null 字符表示),则目标将填充零,直到写入总数 num 个字符为止。如果 source 长于 num,则不会在 destin…