可选的 ifPresent 调用对象方法
Optional ifPresent to call an object method
我必须调用具有以下签名的过程:
private Optional<Address> getAddress()
我用它来填写客户在我系统上的记录。所以,我编写了以下代码来设置记录的地址(如果存在的话)。
Optional<Address> address = getAddress();
if (address.isPresent())
record.setAddress(address.get());
但是,我收到以下通知:
Can be replaced by ifPresent
Reports conditions like if Optional.isPresent()
which could be rewritten in functional style.
所以我认为 太棒了,我将使用这个很酷的 ifPresent
东西来简化我的代码。然后我想到了这一行:
getAddress().ifPresent(x -> record.setAddress(x));
觉得不错,三行合二为一。但后来我从 SonarLint
收到了以下消息
Replace this lambda with a method reference
我想 为什么我需要创建一个方法来设置单个变量?
无论如何,由于我对 Optional
的使用有点陌生,我可能在这里误解了一些东西...那么,根据建议和建议,我应该如何编写这段简单的代码最佳做法?
您不应该为了设置单个变量而创建新方法。 SonarLint 只是建议最好使用方法引用而不是 lambda 表达式。
您可以在 Oracle 网站 Java 8 中阅读方法参考:The Java Tutorials - Method References.
对于您的情况 - SonarLint 只是希望您用以下内容替换该行:
Record record = ...;
getAddress().ifPresent(record::setAddress);
我必须调用具有以下签名的过程:
private Optional<Address> getAddress()
我用它来填写客户在我系统上的记录。所以,我编写了以下代码来设置记录的地址(如果存在的话)。
Optional<Address> address = getAddress();
if (address.isPresent())
record.setAddress(address.get());
但是,我收到以下通知:
Can be replaced by ifPresent
Reports conditions like if
Optional.isPresent()
which could be rewritten in functional style.
所以我认为 太棒了,我将使用这个很酷的 ifPresent
东西来简化我的代码。然后我想到了这一行:
getAddress().ifPresent(x -> record.setAddress(x));
觉得不错,三行合二为一。但后来我从 SonarLint
收到了以下消息Replace this lambda with a method reference
我想 为什么我需要创建一个方法来设置单个变量?
无论如何,由于我对 Optional
的使用有点陌生,我可能在这里误解了一些东西...那么,根据建议和建议,我应该如何编写这段简单的代码最佳做法?
您不应该为了设置单个变量而创建新方法。 SonarLint 只是建议最好使用方法引用而不是 lambda 表达式。
您可以在 Oracle 网站 Java 8 中阅读方法参考:The Java Tutorials - Method References.
对于您的情况 - SonarLint 只是希望您用以下内容替换该行:
Record record = ...;
getAddress().ifPresent(record::setAddress);