使用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()才能实现函数式编程风格?
答案 0 :(得分:2)
我认为,Java Optional
仅用于此类用例-为了避免空检查和通过链接进行操作且无需担心NPE。
我认为您没有滥用Optional
。
可选的目的不是替换每个单个空引用 在您的代码库中,而是帮助设计更好的API,其中 通过阅读方法的签名,用户可以判断是否期望 一个可选值。此外, Optional 会强制您主动展开 一个 Optional 来处理缺少值的情况;结果,你 保护您的代码以防意外的空指针异常。
答案 1 :(得分:2)
如果您不介意没有代码的答案,请付我0.02美元。
我们在我的工作场所(在代码审查中)为此进行了很多努力。坦率地说,有时候我会迷失正确的时间(正确的创造者打算阅读的内容)。我什至不认为在创建之时,Stuart Marks和其他人都确定将如何使用这种方法。像Java语言中的任何其他功能一样,它将被滥用,请确保。但是随着时间的流逝,最佳实践将出现,人们将使用它。
我倾向于认为 iff 不会影响性能,您的用法还可以。与其他方法相比,至少它的方法是如此易于阅读(在这里为我自己说话);但同样,这可能是我在做太多(Java-8以上的代码)。
话虽这么说,将其变成一个混乱局面的方法太容易了,这个局限性取决于您(很可能是您的团队)。
答案 2 :(得分:0)
如果initTxDataResponse可为空,那么也许应该像这样吗?
Optional<TxResponse> initTxDataResponse =
gateway.initiateTx(initTxDataRequest);
response.map(....)