使用Optional.of()方法进行方法链接是个好主意吗?

问题描述 投票:2回答:3

使用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 lambda java-8 optional
3个回答
2
投票

我认为,Java Optional仅适用于这些类型的用例 - 避免空检查并通过链接进行操作而不用担心NPE。

我不认为你过度使用Optional

来自Official Article from Oracle

Optional的目的不是替换代码库中的每个空引用,而是帮助设计更好的API,只需读取方法的签名 - 用户可以判断是否期望可选值。此外,Optional强制您主动解包Optional以处理缺少值;因此,您可以保护代码免受意外的空指针异常的影响。


2
投票

如果你不介意没有代码的答案,只需要0.02美元。

我们在我的工作场所(代码审查)一直在争论这个问题。坦率地说,我有时会丢失它是否正确(由它的创造者阅读)或不是。我甚至不认为在创作时,Stuart Marks和其他人都确定如何(ab)使用它。与Java语言中的任何其他功能一样,它会被滥用,请确保这一点。但随着时间的推移,最佳实践将出现,人们将使用它。

我倾向于认为如果它不会影响性能,那么你的使用就可以了。至少它太容易阅读(在这里为自己说话),与if else检查相比;但同样可能是我(也)做了很多Java-8及以上的代码。

话虽这么说,将它变成一个完全混乱的方式太容易了,在那个方面,这取决于你(很可能是你的团队)。


0
投票

如果initTxDataResponse可以为空,那么它应该是这样吗?

Optional<TxResponse> initTxDataResponse = 
        gateway.initiateTx(initTxDataRequest);

response.map(....)
© www.soinside.com 2019 - 2024. All rights reserved.