lombok中的默认值。如何使用构造函数和构建器初始化默认值 [英] Default value in lombok. How to init default with both constructor and builder

查看:355
本文介绍了lombok中的默认值。如何使用构造函数和构建器初始化默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
    private int id;
    private String nick;
    private boolean isEmailConfirmed = true;
}

我以两种方式初始化它

UserInfo ui = new UserInfo();
UserInfo ui2 = UserInfo.builder().build();

System.out.println("ui: " + ui.isEmailConfirmed());
System.out.println("ui2: " + ui2.isEmailConfirmed());

这是输出

ui: true
ui2: false

看来构建器确实如此没有得到默认值。我将 @ Builder.Default 注释添加到我的属性中,我的对象现在看起来像这样

It seems that builder does not get a default value. I add @Builder.Default annotation to my property and my object now looks like this

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo { 
    private int id;
    private String nick;
    @Builder.Default
    private boolean isEmailConfirmed = true;
}

这是控制台输出

ui: false
ui2: true

我怎样才能使它们都是 true

How can I make them both be true?

推荐答案

我的猜测是不可能的(没有删除代码)。但是你为什么不实现你需要的构造函数呢? Lombok旨在让您的生活更轻松,如果某些东西不能与Lombok一起使用,只需按照老式方式进行。

My guess is that it's not possible (without having delomboked the code). But why don't you just implement the constructor you need? Lombok is meant to make your life easier, and if something won't work with Lombok, just do it the old fashioned way.

@Data
@Builder
@AllArgsConstructor
public class UserInfo { 
    private int id;
    private String nick;
    @Builder.Default
    private boolean isEmailConfirmed = true;

    public UserInfo(){
        isEmailConfirmed = true;
    }
}

控制台输出:

ui: true
ui2: true

这篇关于lombok中的默认值。如何使用构造函数和构建器初始化默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆