Leo*_*ado 2 java lambda optional sonarlint
我必须使用以下签名调用一个过程:
private Optional<Address> getAddress()
Run Code Online (Sandbox Code Playgroud)
我用它来填写客户在我系统上的记录.所以,我做了以下代码来设置记录的地址(如果它存在).
Optional<Address> address = getAddress();
if (address.isPresent())
record.setAddress(address.get());
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下通知:
可以用ifPresent替换
报告条件,如果
Optional.isPresent()可以在功能样式中重写.
所以我觉得很好,我将使用这些很酷的ifPresent东西来简化我的代码.然后我想出了这一行:
getAddress().ifPresent(x -> record.setAddress(x));
Run Code Online (Sandbox Code Playgroud)
并且认为很好,3行合二为一.但后来我从SonarLint收到了以下消息
用方法引用替换此lambda
我想为什么我需要创建一个方法来设置一个变量?
无论如何,由于我对使用有点新意Optional,我可能会误解这里的一些东西......那么,根据建议和最佳实践,我应该如何编写这段简单的代码呢?
您不应该仅为设置单个变量创建新方法.SonarLint建议最好使用方法引用而不是lambda表达式.
您可以在Oracle的网站上阅读Java 8中的方法引用:Java教程 - 方法参考.
对于你的情况 - SonarLint只是想让你用这个代替那行:
Record record = ...;
getAddress().ifPresent(record::setAddress);
Run Code Online (Sandbox Code Playgroud)