私はCompletableFutureを初めて使うので、例外をスローするMetadataLoginUtil :: loginメソッドを呼びたいと思います。しかし、私は '例外的に'書かれているが、以下のコードはコンパイルされていません。これは、try & catch内でMetadataLoginUtil :: login 'をラップする必要があると言います。try&catch on supplyAsync
お知らせください。 ありがとう!
public void run() throws ConnectionException {
CompletableFuture<Void> mt = CompletableFuture.supplyAsync(MetadataLoginUtil::login).exceptionally(e -> {System.out.println(e); return null; }).thenAccept(e -> System.out.println(e));
}
ありがとうございます。「例外的に」というのはどういう点ですか?私はなぜこれが必要なのか分かりません – sfdcdev
問題はむしろ、完全なラムダ原理はチェック例外をまったくカバーしないということです。それでも、例外的に使用するか、RuntimeExceptionsとその派生クラスを処理できます。 1つの非常に一般的なパターンは、実行時の例外でラムダの例外をラップして再スローすることです:... catch(Exception e){throw new RuntimeException(e); } – mtj
@mtj:ラムダと例外は一緒に動作します。インタフェースがどのように宣言されているかだけの問題です。あなたは、たとえ提供された関数の引数が投げることができるものを正確に投げ出すメソッドを宣言するために、例外の型をインタフェースの型パラメータにすることさえできます。しかし、これは、APIが修正された初期のJava 8コンパイラー・バージョンでは機能しませんでした。 – Holger