4

背景
ロジックで try/catch で囲む必要がある場合があります。多くの catch 句があるため、コードが少し見苦しくなります。catch 句で行うことは、log4j を使用してエラーをログに記録することだけです。
質問 一連の catch 句の代わりに、親例外タイプを持つ 1 つの catch 句を使用しても問題ありませんか? これの代わりに:

try{
        //some statements
} catch (KeyStoreException e) {
    LOGGER.error(e);
} catch (CertificateException e) {
    LOGGER.error(e);
} catch (NoSuchAlgorithmException e) {
    LOGGER.error(e);
} catch (FileNotFoundException e) {
    LOGGER.error(e);
} catch (IOException e) {
    LOGGER.error(e);
} catch (UnrecoverableKeyException e) {
    LOGGER.error(e);
} catch (NoPropertyFoundException e) {
    LOGGER.error(e);
}

使用:

try{

    //some statements
} catch (Exception e) {
    LOGGER.error(e);
} 

どちらの方がよいですか?

4

2 に答える 2

1

一連の catch 句の代わりに、1 つの catch 句を親例外型と共に使用しても問題ありませんか?

ハンターは、Java 7 以降の正しいソリューションを提供しています。


Java 6 以前の場合、選択した親例外によって異なります。ThrowableExceptionなどの例外RuntimeExceptionは一般的すぎます。これらをキャッチすると、伝播を許可する必要がある例外を誤ってキャッチ (および誤った処理) する可能性があります。たとえば、あなたのコードは、 NullPointerExceptionおそらく ... からの回復を試みるべきではないことをキャッチします。

最初のバージョンは、2 番目のバージョンよりも正確で堅牢であり、見栄えが悪くても優れています。


もちろん、実際の答えは、例外をキャッチしてログに記録した後に何が起こるかによって異なります。次に起こることがすべての例外に適している場合は、2 番目のバージョンが (ほぼ間違いなく) 望ましいです。たとえば、すべての例外をキャッチし、ログに記録してから を呼び出すことが適切な場合がありますSystem.exit(...)

于 2013-09-13T01:59:47.883 に答える