Javaの話です.
CompletionStage<T>を返却するようなメソッドがあって,それを同期的に処理したい (単体テストを書くというシーンが最も多いでしょう) ということが生きているとあります.しかしCompletionStage
はget()
のようなメソッドが生えていないので同期的に処理することができません.thenAccept()
を使おうにも,例えばJUnitのテストケースではすっぽ抜けてしまってうまく扱えません (逆にテストケース以外ではうまく働くでしょう).
そんなときにどうするかというと,手っ取り早い方法はCompletableFuture<T>にキャストしてしまうことでしょう.すると,オブジェクトにget()
が生えてくるので同期的に値を取り扱うことが可能となります.
例:
final CompletionStage<String> completionStage = getSomething(); final CompletableFuture<String> future = (CompletableFuture<String>) completionStage; final String got = future.get(); // ここで同期的に取り扱える
最初からCompletableFuture
で値を返却してほしいですね.以上です.