をスローする例外をキャッチ、例外の連鎖SomeOtherExceptionは関数z内にスローされます。 関数xとyが関数zで例外がスローされたことを知って、それらを適切に動作させるようにコードを記述したいと思います。 これを行うにはどうすればよいですか?は、いくつかのプログラム(javaの)の一部として、次のコードを想像して、新しいものに
function z() thrown FunctionZFailedException{
try{
//some code here, that might throw exceptions.
}catch (SomeException | SomeOtherException e){
throw new FunctionZFailedException();
}
}
function y() throws FunctionYFailedException{
try{
z();
}catch (FunctionZFailedException e){
throw new FunctionYFailedException();
}
}
function x(){
try{
y();
}catch (FunctionYFailedException e){
//Do something, like alerting user that something went wrong.
}
}
この値は大きすぎますか、他の例外を上位レベルまで "転送"する唯一の目的で新しい例外を宣言していますか?
私はSomeExceptionとSomeOtherExceptionを飛ばして関数xの中にキャッチすることもできると思います。しかし、例えば、関数zで捕捉された例外がSQLExceptionとNoSuchAlgorithmExceptionであり、関数yがlogin()関数である場合、読みにくいコードを補うかもしれないimo。
次に、関数xはlogin()を呼び出そうとし、SQLExceptionをキャッチします。 NoSuchAlgorithmException、これらの例外を単に最高レベルまで飛ばすか、LoginFailedExceptionをキャッチする場合、それぞれの例外をただちに捕捉して新しい例外をスローするようにします。 LoginFailedExceptionをキャッチすると、より読みやすいコードになるようです。
芋両方の方法は、自分の短所を持っている(多くの例外を導入VS以下で読み取り可能なコード)と私は通常、経験豊かなJavaプログラマによってどのように扱われるか似たようなケース思ったんだけど。
例外上の任意の一般的な考えも感謝感謝みんな
、あなたは、元の例外( "原因")を含むようにしたいでしょう: 'キャッチ(FunctionZFailedException E){ スロー新しいFunctionYFailedException(e)を、 } ' – JimmyB