我必须使用以下签名调用过程:
private Optional<Address> getAddress()
我用它填写客户在我系统上的记录。所以,我做了以下代码来设置记录的地址(如果存在)。
Optional<Address> address = getAddress();
if (address.isPresent())
record.setAddress(address.get());
但是,我收到以下通知:
可以用ifPresent替换
报告条件,如
Optional.isPresent()
可以在功能样式中重写。
所以我认为很棒,我会使用这个很酷的ifPresent
内容来简化我的代码。然后我想出了这句话:
getAddress().ifPresent(x -> record.setAddress(x));
并认为很好,3行合为一个。但后来我收到了来自 SonarLint
的以下消息将此lambda替换为方法引用
我想为什么我需要创建一个方法来设置一个变量?
无论如何,由于我对使用Optional
有点新意,我可能会误解这里的某些内容......所以,我应该如何制作这段简单的代码,根据建议和最佳做法?
答案 0 :(得分:6)
您不应该仅为设置单个变量创建新方法。 SonarLint建议最好使用方法引用而不是lambda表达式。
您可以在Oracle网站上阅读Java 8中的方法引用:The Java Tutorials - Method References。
对于你的情况 - SonarLint只是想让你用这个代替那行:
Record record = ...;
getAddress().ifPresent(record::setAddress);