2013-10-07 4 views
5

いずれの場合でもこの関数によってスローされない例外をスローすることを宣言する関数は嫌です。これは、throwの文が関数本体で削除され、throwsの定義から削除されない場合に、リファクタリングで発生します。偽陽性を取得せずにeclipse java warning "throw exceptionの不要な宣言"を有効にするには?

Java - >コンパイラ - >エラー/警告 - >不要なコード - >例外がスローされることの不要な宣言。

enter image description here

例外がインタフェースやスーパーの方法で定義されている場合、これは偽陽性の警告につながります。インターフェースのインプリメンテーション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で警告されます。もちろん

enter image description here

1は、これは悪いデザイン等であることを主張することができますが、ビューの実用的な観点から、これが再び起こるだろうと、おそらく1は、アーキテクチャを変更しないことを受け入れることができますが、単純に追加しますスーパータイプへの新しい例外タイプ。 しかし、この場合、ハウツーは偽陽性警告を取り除くことができますか?もちろん、javadocでサブオプションを使うこともできますが、これはほとんどの本当のポジティブヒットも無視します。もう1つのオプションは、SuppressWarningアノテーションを「未使用」に追加することですが、他のユーザーはその抑制のために不要な警告を受け取る可能性があります。

+1

まあ、一部の人々は、すべての例外はチェックされていない例外であるべきだと主張しています... – Kayaman

+0

これは良い点です。私は私のケースでは、チェックされた例外の利点が表示されません。しかし、これは古いコードなので、すべてをチェックしないように変更するかどうかはわかりません。しかし、これは誰もチェックされた例外をもう使用しないので、それ自身のサブオプションがない理由です。 – jan

+0

"無視して実装する方法を無視する"という単純な英語の読み方は、*その*オプションがあなたが望むことをしなければならないということです。おそらくEclipseのバグ? – Raedwald

答えて

4

個人的に私は警告の設定の下で2番目のオプションをアクティブにしたい:「...文書化された例外を無視」とだけ文書たもの:

/** 
* @throws GeneralException when general stuff goes wrong 
* @throws StatusException when status stuff goes wrong 
*/ 
protected int getStatus() throws GeneralException, StatusException { 
    throw new GeneralException("One exception type in super type only"); 
} 

たぶんもう少し有益な説明が含まれていますが、それは基本的にはこれまで賞賛しています。

+0

私はその問題の可能な解決方法を自分自身に言及し、それがなぜ私にとって解決策ではないのかを説明しました。それにもかかわらず、javadocで '@ @ throws'を自動補完する方法を知っていれば、それは可能かもしれませんし、私もそれを受け入れます。関数の前に'/** 'を入力してEnterを押すと、 。だからこそ、これは文書化されていて、ほとんど完全に役に立たない... – jan

関連する問題