繁体   English   中英

为什么Lombok @Builder与此构造函数不兼容?

[英]Why is Lombok @Builder not compatible with this constructor?

我有这个简单的代码:

@Data
@Builder
public class RegistrationInfo {

    private String mail;
    private String password;

    public RegistrationInfo(RegistrationInfo registrationInfo) {
        this.mail = registrationInfo.mail;
        this.password = registrationInfo.password;
    }
}

首先我只使用@Builder Lombok注释,一切都很好。 但我添加了构造函数,代码不再编译。 错误是:

Error:(2, 1) java: constructor RegistrationInfo in class com.user.RegistrationInfo cannot be applied to given types;
  required: com.user.RegistrationInfo
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length  

所以我有两个问题:

  1. 为什么Lombok @Builder与此构造函数不兼容?
  2. 考虑到我需要构建器和构造函数,如何编译代码?

您可以添加@AllArgsConstructor注释,因为

如果没有定义其他构造函数, @Builder生成一个all-args构造函数。

(引用@Andrew Tobilko)

或者将属性设置为@Builder@Builder(toBuilder = true)这为您提供了复制构造函数的功能。

@Builder(toBuilder = true)
class Foo {
    // fields, etc
}

Foo foo = getReferenceToFooInstance();
Foo copy = foo.toBuilder().build();

当你提供自己的构造函数时,Lombok不会创建一个包含@Builder正在使用的所有args的c-tor。 所以你应该只在你的类中添加注释@AllArgsConstructor

@Data
@Builder
@AllArgsConstructor
public class RegistrationInfo {
    //...
}

据推测,如果没有定义其他构造函数, @Builder生成一个all-args构造函数。

@Data
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
class RegistrationInfo {

    private String mail;
    private String password;

    private RegistrationInfo(RegistrationInfo registrationInfo) {
        this(registrationInfo.mail, registrationInfo.password);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM