私はと言うと呼ばれるクラスを持っているCalculationOutcome
とFileHashOutcome
。彼らのコンストラクタは持っている(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
具体的には、アッカの俳優の中だ、と私はへのインフラストラクチャを求めているパイプメッセージとして俳優に結果バックを。
編集:提案CompletableFuture
の仕事をするかもしれません...はい、良い点、それが表現する必要が正確に何を表しています。そして、それはその後java8の将来にそれを包むあなた自身の準備ができてラフアンド未来を実装するコードのにおいのビットです。
あなたが未来の「エンベロープ」へのアクセス権を持っているかどうかに応じてジャンプするためにいくつかのフープがあります。あなたが中にいる場合はthenApply
、あなたしている「内部」エンベロープと、あなたはそれを知りません。そして、アッカ・インフラストラクチャは、エンベロープを「捨て」と結果だけを返す(と私はキャッチとの終わりに、その例外をラップしたかった主な理由の一つである例外で、あった場合、それは何も返しませんCompletionStage
チェーン)。私はCompletionStageを作成したので、インフラストラクチャは、それが完了したことを私につつかれるまでもちろん、私は、メンバ変数にその上に保持することができます。
@marstranごとに、このクラスの一般的な名称であるトライ。
Scalaはその標準ライブラリで、このようなAクラスがあります。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