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



我有一个名为CalculationOutcomeFileHashOutcome的类。他们的构造函数有(ActualResult, Throwable)参数,在CompletionStage链的末尾,我有handle(XxxOutcome::new).

如果我能写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 中,我要求基础设施将结果作为消息传送回 actor。

编辑:建议CompletableFuture可以完成这项工作...是的,很好,它准确地代表了需要代表的内容。实现你自己的粗略和准备好的未来,然后将其包装在java8的未来,这有点代码的味道。

有一些箍需要跳过,这取决于您是否可以访问未来的"信封"。如果你在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

相关内容

最新更新