web-dev-qa-db-ja.com

Eclipseで未処理の例外自動生成キャッチコードを変更しますか?

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

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

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

これをに変更したい

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

これは可能ですか?

[〜#〜]更新[〜#〜]

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

例外がキャッチされて印刷された場合、それはもうキャッチする必要もありません。誤って例外を処理するのを忘れると、アプリケーションがクラッシュするのが好きです。だから、私はデフォルトでそれを投げ直すのが好きです。

29
Suzan Cioc

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

  1. 環境設定で、Java>コードスタイル>コードテンプレートに移動します。
  2. コードの下で、ブロック本体をキャッチを選択します。
  3. 編集ボタンを押してコードを変更します。終了したら、[〜#〜] ok [〜#〜]ボタンを押します。

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

     // ${todo} Auto-generated catch block
37
Andy Thomas

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

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

重要なのは、例外をスローする可能性のある各行を個別にではなく、コードブロック全体をラップすることです。ブロックは、チェックされた例外とチェックされていない例外をいくつでもスローできます。これにより、チェックされていない例外が無傷で通過できるようになり、チェックされた例外がラップされます。

1
Marko Topolnik

あなたはおそらくこれを知っているでしょう...しかし、チェックされた例外からすべての厄介な混乱と苛立ちを取り除きたいのなら、なぜすべての単一のメソッドに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
}
0
mike rodent

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

私はなぜだけではないのかを意味します:-

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

なぜなら、あなたのコードでは、基本的に、checked exceptionunchecked oneでラップしている可能性があるからです。あなたのMyUnhandledExceptionchecked exceptionと仮定すると。

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

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

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

0
Rohit Jain