java - 是否可以使用 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
which 创建对象的新不可变副本
new User().withFirstName("Michael").withLastName("Smith")
或者您可以使用@Builder
which 创建单个可变构建器实例,然后在调用build
.
User.builder().firstName("Michael").lastName("Smith").build()
推荐阅读
- ruby-on-rails - Puma 无法在 AWS Elastic Beanstalk 上的 Rails 5 上运行
- docker - 如何为 minikube 内的 pod 配置内部静态 ip
- angularjs - 如何将 ng-options comprehension_expression 传递给 AngularJS 组件?
- statistics - OLS 回归的问题 - 高度相似的 X 和截距系数
- apostrophe-cms - 如何在 ApostropheCMS 中设置网站图标
- scala - 查找在给定月份中花费最大金额的客户 ID
- python - 如何解密我知道它在 Python 中的模式的字符串?
- python - 如何在 Python 或 R 中绘制这种图表?
- python - numpy.array Boolean mix with int
- hiveql - 按 sql / hiveql 中的列中的值集分组