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);
}
これは可能ですか?
[〜#〜]更新[〜#〜]
なぜ人々の話題を変えるのが大好きなのですか?
例外がキャッチされて印刷された場合、それはもうキャッチする必要もありません。誤って例外を処理するのを忘れると、アプリケーションがクラッシュするのが好きです。だから、私はデフォルトでそれを投げ直すのが好きです。
はい、Eclipseによって追加されたデフォルトのコードを変更できます。
デフォルトのcatchブロックにTODOコメントを追加することを検討してください。たとえば、デフォルトには次のものが含まれます。
// ${todo} Auto-generated catch block
個人的には、実際にチェックされた例外タイプに関係なく、一般的なイディオムを使用します。代わりに、Eclipseにそれをテンプレートとして使用させることができます。
try {
...
}
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
重要なのは、例外をスローする可能性のある各行を個別にではなく、コードブロック全体をラップすることです。ブロックは、チェックされた例外とチェックされていない例外をいくつでもスローできます。これにより、チェックされていない例外が無傷で通過できるようになり、チェックされた例外がラップされます。
あなたはおそらくこれを知っているでしょう...しかし、チェックされた例外からすべての厄介な混乱と苛立ちを取り除きたいのなら、なぜすべての単一のメソッドに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
}
Catch句から例外を再スローする場合は、現在のメソッドを呼び出したメソッドで処理する必要があります。ただし、例外をRuntimeException
でラップする場合は、それを処理する必要はありません。しかし、なぜあなたはそれをするのですか?
私はなぜだけではないのかを意味します:-
try {
myfunction();
} catch (MyUnhandledException e) {
throw e;
}
なぜなら、あなたのコードでは、基本的に、checked exception
をunchecked one
でラップしている可能性があるからです。あなたのMyUnhandledException
をchecked exception
と仮定すると。
また、このアプローチに従っている場合でも、declare it
でthrown
になるにはthrows clause
が必要であることに注意してください。
あなたが今しているようにやりたいだけなら、それもうまくいくでしょう。 @Andyの回答に従って、Eclipse setting
を変更できます。
しかし、あなたのデザインを見たほうがいいでしょう。 overriden
メソッドで宣言されていない例外をスローして、メソッドがオーバーライドされるのはなぜですか。おそらく何か問題があり、修正する必要があります。