2017-09-28 11 views
0

明示的に(実行時以外の)例外をスローするクラスと、本体がスローする(実行時以外の)例外のみを取得する方法はありますか?コール可能なJava汎用例外

public interface Throw1Callable<T, E extends Exception> { 
    public T call() throws E; 
} 

この方法では、コールが呼び出されたとき、あなたは例外を処理するために持っているだけではなくRuntimeExceptionsを処理する必要が及びません。

は、私は次のように、例外の固定数でこれを行う方法を知っていますE.しかし、これはまったく変わりません。私は2つの例外のためにこれをやりたければ、Throw2Callableなどの新しいクラスを作成する必要があります。Java(おそらくすべての言語)には、ジェネリックの可変数や何か役立つかもしれない種類のものはありません。

上記をカプセル化する良い方法はありますか?

説明のために編集:A.aがIOExceptionをスローするとしましょう。私は((Throw1Callable)() -> A.a()).call()を実行し、ExceptionをキャッチするのではなくIOExceptionだけを捕捉できるようにしたいと思います。 ((Callable)() -> A.a()).call()はIOExceptionの代わりに例外をスローします。

+0

'(ランタイムではない)例外を明示的にスローするクラスを取得することはどういう意味ですか。 Exceptionをスローできるメソッドを作成したいですか? – Andreas

+0

わかりやすくするためにいくつか追加しました。つまり、本体がIOExceptionのような例外をスローすると、.callはExceptionの代わりにIOExceptionだけをスローする必要があります。 –

答えて

1

これは、Javaでは不可能な「vararg」型のパラメータのようなものです。

だからおそらくThrowXCallableがここでできる最高です。私はここで "スケーラビリティ"が大きな問題だとは思わない、あなたはおそらくThrow5Callable以上を必要としません。

Java自体がこの方法を採用しています - BiFunctionを参照してください。

+0

私はこれがよりよい解決策であることを期待していましたが、おそらくあなたは正しいでしょう。私はおそらくThrow3以上を必要としません。 –

関連する問題