機能があります
public ShoppingCart fetchCart(Long storeId) throw NotFoundException {
///
}
次に、を使用してこの関数を別の関数に割り当てようとしました
Function<Long, ShoppingCart> func = e -> {
fetchCart(e)
}
しかし、それは常に例外が処理されないことを私に告げています。しかし、関数の割り当ての周りにtry / catchを追加しようとすると、「Function <Long、ShoppingCart> func」で例外が発生しません。
これを実行し、元の関数の例外をキャプチャする方法はありますか?ありがとう!
もう少しコンテキスト。funcをパラメーターとして別の関数に与えて、このfuncを別の関数で並行して実行できるようにしたいので、これを行っています...これらの関数の値を例外でも比較するように。したがって、関数はfetchCartではなくキャプチャするために不可欠です。
あなたの問題はNotFoundExceptionがチェックされた例外だと思います。チェックされた例外(RuntimeExceptionサブクラスではない)はラムダでスローできません。回避策は、それをキャッチし、RuntimeException内でその原因として再スローすることです。
例えば:
Function<Long, ShoppingCart> func = e -> {
try {
return fetchCart(e);
} catch (NotFoundException ex) {
RuntimeException re = new RuntimeException();
re.initCause(ex);
throw re;
}
return null;
};
次に、runtimeExceptionをキャッチするときに、その原因を処理する必要があります。
try {
/// call func here
} catch(Exception e) {
((NotFoundException)e.getCause()).printStackTrace();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加