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

@NoArgsConstructor和@AllArgsConstructor,@Builder

属于lombok包的注解,所以得先导入依赖

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

简单点说:

  • @NoArgsConstructor : 生成一个无参数的构造方法
  • @AllArgsContructor: 会生成一个包含所有变量的构造方法,默认生成的方法是 public 的
  • @Builder 使用创建者模式又叫建造者模式,可以针对传入的参数生成构造方法

 先测试@NoArgsConstructor,@AllArgsContructor

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class Student {
   public String name;
   public int age;
}

编译后:

public class Student {
    public String name;
    public int age;
 
    public Student() {
    }
 
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return this.name;
    }
 
    public int getAge() {
        return this.age;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

会发现生成了,有参数与无参数的方法。

效果类似于

在这里插入图片描述

 

再讲@Builder

Builder使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。

效果:

Student.builder()
               .sno( "001" )
               .sname( "admin" )
               .sage( 18 )
               .sphone( "110" )
               .build();

那么@Builder内部帮我们做了什么?
1、创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类形同的属性(称为构建器)。
2、在构建器中:对于目标类中的所有的属性和未初始化的 final 字段,都会在构建器中创建对应属性。
3、在构建器中:创建一个无参的 default 构造函数。
4、在构建器中:对于实体类中的每个参数,都会对应创建类似于 setter 的方法,只不过方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用),如上例所示。
5、在构建器中:一个 build() 方法,调用此方法,就会根据设置的值进行创建实体对象。
6、在构建器中:同时也会生成一个 toString() 方法。
7、在实体类中:会创建一个 builder() 方法,它的目的是用来创建构建器。

1. @Builder中使用 @Singular 注释集合

@Builder 也可以为集合类型的参数或字段生成一种特殊的方法。 它采用修改列表中一个元素而不是整个列表的方式,可以是增加一个元素,也可以是删除一个元素。

这样就可以轻松地将 List 字段中包含2个字符串。 但是想要这样来操作集合,你需要使用 @Singular 来注释字段或参数。

在使用 @Singular 注释注释一个集合字段(使用 @Builder 注释类), lombok 会将该构建器节点视为一个集合,并生成两个 adder 方法而不是 setter 方法。

Student.builder()
                .sno( "001" )
                .sname( "admin" )
                .sage( 18 )
                .sphone( "110" ).sphone( "112" )
                .build();
    @Singular
    private List<String> sphone;

2. @Singular 注解配置value属性

User.builder()
                .testHobbies("reading")
                .testHobbies("eat")
                .id(1)
                .password("admin")
                .username("admin")
                .build();
    @Singular(value = "testHobbies")
    private List<String> hobbies;

相关文章:

  • 比较Hive数据库与MySQL数据库
  • PMP每日一练 | 考试不迷路-9.26(包含敏捷+多选)
  • 【Linux修炼】1.常见指令(上)
  • 文件上传-- Web渗透
  • Redis:13-Redis持久化之RDB
  • 洛谷:P6062 [USACO05JAN]Muddy Fields G
  • 七、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量控制
  • vue3 创建vue3模板
  • js 导出 excel
  • Mybatis-Plus(核心功能篇 ==> 代码生成器(新版)
  • Intel汇编-LOOP循环检查ECX含零值
  • DBNet学习笔记
  • 1、搭建环境
  • 基于Java+Spring+vue+element社区疫情服务平台设计和实现
  • 【Leetcode】剑指Offer 34:二叉树中和为某一值的路径
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 2018一半小结一波
  • CentOS6 编译安装 redis-3.2.3
  • ESLint简单操作
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • happypack两次报错的问题
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue 动态创建 component
  • vue学习系列(二)vue-cli
  • 从0实现一个tiny react(三)生命周期
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 理解在java “”i=i++;”所发生的事情
  • 你真的知道 == 和 equals 的区别吗?
  • 写给高年级小学生看的《Bash 指南》
  • 优化 Vue 项目编译文件大小
  • 正则学习笔记
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 大数据全解:定义、价值及挑战
  • (1)Android开发优化---------UI优化
  • (LeetCode) T14. Longest Common Prefix
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (编译到47%失败)to be deleted
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (已解决)什么是vue导航守卫
  • (转)shell调试方法
  • (转)一些感悟
  • ******之网络***——物理***
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net 知识杂记
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET处理HTTP请求
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .NET项目中存在多个web.config文件时的加载顺序