gpt4 book ai didi

java - 是否有一个 java8 标准库类表示 "possibly with exception"与 java.util.Optional 表示 "possibly null"的方式相同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:27 28 4
gpt4 key购买 nike

我有一个名为 say CalculationOutcome 的类(class)和 FileHashOutcome .他们的构造函数有 (ActualResult, Throwable)参数,并在 CompletionStage 链的末尾我有 handle(XxxOutcome::new) .

如果我可以写成 say PossiblyWithError<FileHash> 可能会使意图更清晰并节省一些样板文件.

编辑:人们要求示例代码...

class FileHashOutcome {
private final String hash;
private final Throwable throwable;
FileHashOutcome(String hash, Throwable throwable){
// Usual assignments
}
}

CompletionStage<FileHashOutcome> future =
SomeExternalLibrary.calculateHash(file)
// ...It's a CompletionStage<String> at this stage...
.handle(FileHashOutcome::new);

// Then I pass `future` to a service that
// will execute it and pass back the result asynchronously

具体来说,它在 Akka actor 中,我要求基础设施 pipe结果作为消息返回给参与者。

编辑:建议CompletableFuture可能会完成这项工作......是的,好点,它代表了需要代表的东西。实现您自己的粗略的 future 然后将其包装在 java8 future 中有点代码味道。

根据您是否能够进入 future 的“信封”,有一些障碍需要跳过。如果你在 thenApply 里面那么你就在信封“里面”,而你却不知道。而 Akka 基础设施“扔掉”信封,只返回结果(如果有异常,它什么也不返回,这是我想在 CompletionStage 末尾捕获并包装该异常的主要原因之一。链)。当然,由于我创建了 CompletionStage,我可以在成员变量中保留它,直到基础架构提示我它已完成。

最佳答案

根据@marstran,这个类的通常名称是Try

Scala 在其标准库中有这样一个类:https://www.scala-lang.org/api/2.9.3/scala/util/Try.html

同样可以在 Java 中完成,但它不是标准库的一部分:https://dzone.com/articles/why-try-better-exception-handling-in-java-with-try

关于java - 是否有一个 java8 标准库类表示 "possibly with exception"与 java.util.Optional 表示 "possibly null"的方式相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com