その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

CompletionStage<T>な変数を同期的に処理したいんですけど〜ってとき

Javaの話です.

CompletionStage<T>を返却するようなメソッドがあって,それを同期的に処理したい (単体テストを書くというシーンが最も多いでしょう) ということが生きているとあります.しかしCompletionStageget()のようなメソッドが生えていないので同期的に処理することができません.thenAccept()を使おうにも,例えばJUnitのテストケースではすっぽ抜けてしまってうまく扱えません (逆にテストケース以外ではうまく働くでしょう).

そんなときにどうするかというと,手っ取り早い方法はCompletableFuture<T>にキャストしてしまうことでしょう.すると,オブジェクトにget()が生えてくるので同期的に値を取り扱うことが可能となります.

例:

final CompletionStage<String> completionStage = getSomething();
final CompletableFuture<String> future = (CompletableFuture<String>) completionStage;
final String got = future.get(); // ここで同期的に取り扱える

最初からCompletableFutureで値を返却してほしいですね.以上です.