为什么龙目岛@Builder与此构造函数不兼容?

2022-09-01 04:56:50

我有这个简单的代码:

@Data
@Builder
public class RegistrationInfo {

    private String mail;
    private String password;

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

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

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. 为什么龙目岛与此构造函数不兼容?@Builder
  2. 如何进行代码编译,同时考虑到我需要生成器和构造函数?

答案 1

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

@Builder生成一个全 args 构造函数,因为没有其他构造函数定义。

(引用@Andrew Tobilko)

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

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

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

答案 2

当你提供自己的构造函数时,龙目岛不会创建一个包含所有正在使用的args的c-tor。因此,您应该只需向类添加注释即可:@Builder@AllArgsConstructor

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

推荐