29

Java で未処理の例外がある場合、Eclipse は (1) throws 宣言を追加する、(2) try/catch で囲む、という 2 つのオプションを提案します。

(2) を選択すると、コードが追加されます

try {
   myfunction();
} catch (MyUnhandledException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

これを次のように変更したい

try {
   myfunction();
} catch (MyUnhandledException e) {
    throw new RuntimeException(e);
}

これは可能ですか?

アップデート

なぜ人々は話題を変えるのが大好きですか?

例外がキャッチされて出力された場合、それをキャッチする必要もありません。誤って例外を処理するのを忘れた場合、アプリケーションがクラッシュするのが好きです。したがって、デフォルトで再スローするのが好きです。

4

4 に答える 4

37

はい、Eclipse によって追加されたデフォルトのコードを変更できます。

  1. [設定] で、 [Java] > [コード スタイル] > [コード テンプレート] に移動します。
  2. [コード]で、[ Catch block body]を選択します。
  3. 編集ボタンを押してコードを変更します。終了したら、 OKボタンを押します。

デフォルトの catch ブロックに TODO コメントを追加することを検討してください。たとえば、デフォルトには次のものが含まれます。

     // ${todo} Auto-generated catch block
于 2012-11-07T18:10:06.653 に答える
1

個人的には、実際のチェックされた例外の種類に関係なく、一般的なイディオムを使用しています。代わりに、Eclipse でそれをテンプレートとして使用するようにすることもできます。

try {
 ...
} 
catch (RuntimeException e) { throw e; } 
catch (Exception e) { throw new RuntimeException(e); }

ポイントは、例外をスローする可能性のある各行を個別にラップするのではなく、コード ブロック全体をラップすることです。ブロックは、任意の数のチェック済みおよびチェックされていない例外をスローする可能性があり、これにより、チェックされていない例外が無傷で通過できるようになり、チェックされた例外がラップされます。

于 2012-11-07T18:10:44.140 に答える
0

catch 句から例外を再スローする場合は、現在のメソッドを呼び出したメソッドで処理する必要があります。ただし、例外を でラップすると、例外RuntimeExceptionを処理する必要がなくなります。しかし、なぜあなたはそれをするのですか?

それだけではない理由を意味します: -

try {
   myfunction();
} catch (MyUnhandledException e) {
    throw e;
}

コードでは、基本的に a をラップしているためchecked exceptionunchecked one. 私があなたを と仮定するMyUnhandledExceptionchecked exception

また、このアプローチに従っている場合でも、 にいる必要があることdeclare itに注意thrownしてくださいthrows clause

あなたがやっていることをやりたいだけなら、それもうまくいくでしょう。Eclipse setting@Andyの回答に従って変更できます。

しかし、あなたのデザインを見た方が良いでしょう。メソッドで宣言されていない例外をスローしてメソッドがオーバーライドされるのはなぜですかoverriden。おそらく何かが間違っているので、修正する必要があります。

于 2012-11-07T18:08:04.687 に答える
-1

あなたはおそらくこれを認識しています...しかし、すべての厄介な混乱とチェック例外からの苛立ちを取り除きたい場合は、すべてのthrows Exceptionメソッドに追加してみませんか?

オーバーライドされたインターフェイス メソッドの場合、この種のパターンを使用できます。

@Override
public void close() throws IOException {
    try {
        _close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        throw new RuntimeException(e);
    }
}

private void _close() throws Exception {
    // ... closing ops
}
于 2016-10-23T13:39:49.357 に答える