lombok中的@Builder、@Singular注解

@Builder

之前没用过@Builder注解,稍微学习了一下,发现这个注解就是方便new对象的。

我以前在实体类上都是加@AllArgsConstructor、@NoArgsConstructor两个注解来new对象。
但是如果遇到A(a,b,c,d,e,f,g)实体只需要创建A(a,b,c)的对象的情况,就只能再生成一个“死的”构造方法:

    public A(String a, String b, String c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

那@Builder注解就是为了减少这种“傻瓜”操作

没用@Builder之前我都是这么创建对象:

不使用@Builder的情况
在这里插入图片描述

用@Builder:

使用@Builder的情况
在这里插入图片描述
两种方法创建出来的对象是一样的,没有赋值的属性就是空的,但是明显@Builder更方便

structure里可以看到是写了个内部类,具体的方法怎么写的网上可以搜得到
这里有个看得到编译后的代码的:https://www.jianshu.com/p/5e42ecede166

@Singular

实际应用中一般会遇到实体类中包含list、map、set等集合的情况,这种又是怎么处理的?
在这里插入图片描述
那么我们可以以下方式来创建对象:
在这里插入图片描述

但是多多少少还是有点呆,那就有@Singular来搭配使用:
在这里插入图片描述
那么我们就可以这么来创建对象:

        Person p5 = Person.builder()
                .name("hy")
                .sex("女")
                .childrenInfo("yzx").childrenInfo("yzy")
                .build();
        System.out.println(p5);

@Singular使用中需要注意的

  • 构造集合的方法名

上面的图如果仔细地话会发现明明我的属性名是childrenInfos,但是structure中的方法名是childrenInfo
在这里插入图片描述
是因为**@Singular注解添加的额外方法使用的是集合名的单数形式**
例如childrenInfos会生成childrenInfo;glasses会生成glass;children会生成child
但是有时候属性名不规范或者无法识别时,@Singular就不知道生成啥样的,这个时候编译就报错,提示你:

Can’t singularize this name: “ssss”; please specify the singular explicitly (i.e. @Singular(“sheep”))

解决方法:
在@Singular注解后面加上你要的方法名就可以了
在这里插入图片描述

  • 对于map、set
    对于map集合,键重复时,取后put的键值对
    对于set集合,重复添加同一元素不会报错,但是只会有一个
    在这里插入图片描述

参考:
https://www.baeldung.com/lombok-builder-singular

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值