-2

これが可能であるかどうかは少し疑わしいですが、これについてより多くの情報を入手すると非常に役立ちます. 関数がまだスローしていないすべての例外をキャッチする方法を知りたいです。

関数があるとします:

public int func(int a, int b) throws IOException, EOFException {
    try {
        doSomething(a, b);
    } catch (AllExceptionsExceptionIOandEOF e) {
        doSomethingWithError(e);
    }
    return 0;
}

Javaにそれを行う方法を伝える方法はありますか? ジェネリックExceptionをスローすることはすべての場合に機能することはわかっていますが、スローされた例外以外はすべてスローしたいと考えています。

これが悪い習慣と見なされる場合、その理由は何ですか? そして、同じ目標を達成するための良い代替手段は何ですか?

(追伸 -- 考えられるすべての例外は個別に処理する必要があるという格言は知っています。私の目的としては、エラーをキャッチしてデータベースに記録し、その間に見逃したものを確認したいだけです。Exception関数がすでに 2 つの例外をスローしている場合、ジェネリックをキャッチするのは気が進まない)

思いついたのですが、1つの方法は次のように言うことです:

try {
    doSomething(a, b);
} catch (AllExceptionsExceptionIOandEOF e) {
    doSomethingWithError(e);
    if (e instanceof IOException)
        throw e;
    if (e instanceof EOFException)
        throw e;
}

これを行うよりエレガントな方法はありますか?

編集 - 残念ながら、プロジェクトは Java 6 準拠で行われています。ただし、Java 7 によって Try/Catches がもう少し柔軟になったことは知っています。

4

5 に答える 5

1
try {
    doSomething(a, b);
} catch (IOException e) {
    throw e;
} catch (EOFException e) {
    throw e;
} catch (Exception e){
    doSomethingWithError(e);
}
于 2013-07-10T17:20:09.193 に答える
0

EOFException は IOException を拡張するため、以下のように IOException をキャッチしてスローできます。

catch( IOException e){ //やりたいことをやる }

于 2013-07-10T17:29:16.060 に答える
0

java1.7以前では

try{}
catch(FileNotFoundException e){}
catch(IOException e){}
catch(Exception e){
    //anything not handled in other catch clause
}

より具体的なものからより具体的でないものへと、catch 句を必ず宣言してください。

Java 1.7 では、より手の込んだことができます。

catch(IOException | EOFException e){}
于 2013-07-10T17:20:11.180 に答える
0

Java 1.7 から、例外の動作をグループ化できます。

try{
      //some code
}catch( IOException | AnotherException e){
  //do what you want
}catch(RuntimeException re){
    //happen a runtimexception 
}

そして、関数がスローしないすべての例外をキャッチするには、それをスローすることができRuntimeException、サブクラスは未チェックの例外を引き起こします。

階層の例外については、最初にサブクラス、次により一般的です。

例えば ​​:

 catch(EOFException e){

 }catch(IOException e){

 }

ちなみに、例外は一度だけキャッチしてください。

于 2013-07-10T17:19:08.417 に答える