いずれの場合でもこの関数によってスローされない例外をスローすることを宣言する関数は嫌です。これは、throw
の文が関数本体で削除され、throws
の定義から削除されない場合に、リファクタリングで発生します。偽陽性を取得せずにeclipse java warning "throw exceptionの不要な宣言"を有効にするには?
Java - >コンパイラ - >エラー/警告 - >不要なコード - >例外がスローされることの不要な宣言。
例外がインタフェースやスーパーの方法で定義されている場合、これは偽陽性の警告につながります。インターフェースのインプリメンテーションAが1つの例外タイプを投げるのではなく、インプリメンテーションBが実行する場合、eclipseはインプリメンテーションAの不要な宣言について警告します。それで、私はサブオプション「無視してメソッドを実装するのを無視する」をアクティブ化するのです。
ここまでは至福です。しかし、私は、異質の場合があります。オーバーライドされたメソッドは、スーパーメソッドでは使用されない例外タイプをスローします。この最小限の例を参照してください。
class Vehicle {
protected int getStatus() throws GeneralException, StatusException {
throw new GeneralException("One exception type in super type only");
}
}
class Car extends Vehicle {
@Override
protected int getStatus() throws GeneralException, StatusException {
throw new StatusException("Special case, that gets special handling");
}
}
車両のStatusExceptionはeclipseで警告されます。もちろん
1は、これは悪いデザイン等であることを主張することができますが、ビューの実用的な観点から、これが再び起こるだろうと、おそらく1は、アーキテクチャを変更しないことを受け入れることができますが、単純に追加しますスーパータイプへの新しい例外タイプ。 しかし、この場合、ハウツーは偽陽性警告を取り除くことができますか?もちろん、javadocでサブオプションを使うこともできますが、これはほとんどの本当のポジティブヒットも無視します。もう1つのオプションは、SuppressWarningアノテーションを「未使用」に追加することですが、他のユーザーはその抑制のために不要な警告を受け取る可能性があります。
まあ、一部の人々は、すべての例外はチェックされていない例外であるべきだと主張しています... – Kayaman
これは良い点です。私は私のケースでは、チェックされた例外の利点が表示されません。しかし、これは古いコードなので、すべてをチェックしないように変更するかどうかはわかりません。しかし、これは誰もチェックされた例外をもう使用しないので、それ自身のサブオプションがない理由です。 – jan
"無視して実装する方法を無視する"という単純な英語の読み方は、*その*オプションがあなたが望むことをしなければならないということです。おそらくEclipseのバグ? – Raedwald