使用Optional.of()方法进行方法链接是个好主意吗?
我与一组同事就Optional.of()方法进行了对话。目前其中一个项目是他们使用Optional.of()方法来实现链接函数式编程风格的方法。
这里我给出示例:
TxResponse initTxDataResponse = gateway.initiateTx(initTxDataRequest);
Optional.of(initTxDataResponse)
.map(initTxDataResponse::getReturnCode)
.filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
.map(code -> {
// doing some business logic ,we are not
return code;
}).orElseThrow(() -> new NoTransactionFound());
我觉得我们过度使用Optional.of()方法
优秀的做法是使用Optional.of()方法在jdk 8中实现函数式编程风格吗?
案例2:
TxResponse response = transactionRepository.getTransacationById(TransactionId).elseThrow(() -> ResourceNotFoundException());
Optional.of(response)
.map(response::getReturnCode)
.filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
.map(code -> {
// doing some business logic ,we are not
return code;
}).orElseThrow(() -> new RuntimeException());
在这种情况下,Optional.of()是否需要实现函数式编程风格?
我认为,Java Optional
仅适用于这些类型的用例 - 避免空检查并通过链接进行操作而不用担心NPE。
我不认为你过度使用Optional
。
来自Official Article from Oracle
Optional的目的不是替换代码库中的每个空引用,而是帮助设计更好的API,只需读取方法的签名 - 用户可以判断是否期望可选值。此外,Optional强制您主动解包Optional以处理缺少值;因此,您可以保护代码免受意外的空指针异常的影响。
如果你不介意没有代码的答案,只需要0.02美元。
我们在我的工作场所(代码审查)一直在争论这个问题。坦率地说,我有时会丢失它是否正确(由它的创造者阅读)或不是。我甚至不认为在创作时,Stuart Marks和其他人都确定如何(ab)使用它。与Java语言中的任何其他功能一样,它会被滥用,请确保这一点。但随着时间的推移,最佳实践将出现,人们将使用它。
我倾向于认为如果它不会影响性能,那么你的使用就可以了。至少它太容易阅读(在这里为自己说话),与if else检查相比;但同样可能是我(也)做了很多Java-8及以上的代码。
话虽这么说,将它变成一个完全混乱的方式太容易了,在那个方面,这取决于你(很可能是你的团队)。
如果initTxDataResponse可以为空,那么它应该是这样吗?
Optional<TxResponse> initTxDataResponse =
gateway.initiateTx(initTxDataRequest);
response.map(....)