可选ifPresent来调用对象方法

时间:2017-07-27 18:16:04

标签: java lambda optional sonarlint

我必须使用以下签名调用过程:

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有点新意,我可能会误解这里的某些内容......所以,我应该如何制作这段简单的代码,根据建议和最佳做法?

1 个答案:

答案 0 :(得分:6)

您不应该仅为设置单个变量创建新方法。 SonarLint建议最好使用方法引用而不是lambda表达式。

您可以在Oracle网站上阅读Java 8中的方法引用:The Java Tutorials - Method References

对于你的情况 - SonarLint只是想让你用这个代替那行:

Record record = ...;
getAddress().ifPresent(record::setAddress);