是否可以使用 Lombok 自动执行函数重载?

Is it possible to automate function overloading with Lombok?

我很好奇是否可以使用 Lombok 来缩短函数重载。基本上我想缩短这个。

public setUserDetails() {
    setUserDetails(null, null, null, null);
}

public setUserDetails(String firstName) {
    setUserDetails(firstName, null, null, null);
}

public setUserDetails(String firstName, String lastName) {
    setUserDetails(firstName, lastName, null, null);
}

public setUserDetails(String firstName, String lastName, String address) {
    setUserDetails(firstName, lastName, address, null);
}

public setUserDetails(String firstName, String lastName, String address, String phoneNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.address = address;
    this.phoneNumber = phoneNumber;
}

变成这样的东西:

@CreateFunctionOverloads
public setUserDetails(String firstName, String lastName, String address, String phoneNumber) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.address = address;
    this.phoneNumber = phoneNumber;
}

不,但是您的 API 看起来使用起来很容易出错,所以这也许是件好事。

5个参数都是字符串的问题是我可以这样调用它,它会完全编译好

foo.setUserDetails("Smith", "Michael", "address", "phoneNum");

你看到问题了吗?

我调换了第一个和第二个参数

这是一种你会花费数小时尝试调试的东西,当你最终意识到时却觉得自己像个白痴。我知道,因为它发生在我身上。

所以我会放弃你的想法。有更好的方法来创建带有可选字段的对象。

您可以使用 @With 创建对象的新的不可变副本

new User().withFirstName("Michael").withLastName("Smith")

或者您可以使用 @Builder 创建一个可变的构建器实例,然后在您调用 build.

时创建对象的真实实例
User.builder().firstName("Michael").lastName("Smith").build()