6

次のコードがあるとします。

Runnable exceptionHandler = () -> throw new RuntimeException();

より簡潔に記述する方法、現在利用できる方法、または将来の Java リリースで利用できる方法はありますか? 私は次のようなものを期待しています:

Runnable exceptionHandler = RuntimeException::throw;

追加情報として、例外的な状況が発生する可能性があるメソッドにこのコードを使用するつもりですが、常にRuntimeExceptionスローされる必要はありません。例外的な状況が発生した時点で、発信者がやりたいことを自由に行えるようにしたいと考えています。

私には思えますが、これはJava 8では不可能です。これについては議論されていますか?これが不可能な理由はありますか?

4

1 に答える 1

2

Exception::throwは有効ではなく、メーリング リストで関連する議論が見つかりません。

ただし、「例外的な状況が発生した時点で発信者がやりたいことを自由に行えるようにする」という意図がある場合は、次のような設計を使用して次のCompletableFutureように書くことができます。

public static void main(String[] args) throws Exception {
    CompletableFuture.runAsync(() -> somethingThatMayThrow())
                     .exceptionally(t -> { t.printStackTrace(); return null; });
}

private static void somethingThatMayThrow() throws RuntimeException {
    throw new RuntimeException();
}

ただし、それは未チェックの例外でのみ機能します。

于 2014-04-09T10:22:29.787 に答える