是否可以使用 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()
我很好奇是否可以使用 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()