検証環境
Checkstyleバージョン:10.3.3
Javaバージョン:17
チェック概要
チェック追加バージョン |
---|
Checkstyle 3.2 |
throwsに指定された数以上の例外を記述していないかチェックする。
java.lang.Override
アノテーションが付与されたメソッドは、そのクラスでは、メソッドのシグネチャを変更できないため、チェック対象外となる。
例外はメソッドのインターフェイスの一部を構成しているが、あまりに多くの例外をスローするようにメソッドを宣言すると、例外処理が面倒になり、catch(Exception ex)
のようなコードを書く可能性がある。
デフォルトの設定値である「4」は、OpenJDKのような大きなプロジェクトでThrowsCountCheckを行った際の報告に基づく経験値となっている。
プロパティ
プロパティ | 型 | デフォルト値 | 説明 | 追加バージョン |
---|---|---|---|---|
max | int | 4 | throwsに記述できる例外の最大数 | 3.2 |
ignorePrivateMethods | boolean | true | プライベートメソッドを検証対象外とするかどうか | 6.7 |
設定+チェック実行結果
プロパティ設定なし
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="ThrowsCount"/> </module> </module>
チェック実行例
class MyClass { // NG throwsに記述できる例外は4個まで public void myFunction() throws CloneNotSupportedException, ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException, IllegalStateException, NullPointerException { } // OK public void myFunc() throws ArithmeticException, NumberFormatException { } // OK privateメソッドはチェック対象外 private void privateFunc() throws CloneNotSupportedException, ClassNotFoundException, IllegalAccessException, ArithmeticException, ClassCastException { } }
プロパティ設定あり
max
throwsに記述できる例外の最大数を指定する。
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="ThrowsCount"> <property name="max" value="2"/> </module> </module> </module>
チェック実行例
class MyClass { // NG throwsに記述できる例外は2個まで public void myFunction() throws CloneNotSupportedException, ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException { } // OK public void myFunc() throws ArithmeticException, NumberFormatException { } // OK privateメソッドはチェック対象外 private void privateFunc() throws CloneNotSupportedException, ClassNotFoundException, IllegalAccessException { } }
ignorePrivateMethods
trueを設定した場合、プライベートメソッドはチェック対象外となる(デフォルト:true)
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="ThrowsCount"> <property name="ignorePrivateMethods" value="false"/> </module> </module> </module>
チェック実行例
class MyClass { // NG throwsに記述できる例外は4個まで public void myFunction() throws CloneNotSupportedException, ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException, IllegalStateException, NullPointerException { } // OK public void myFunc() throws ArithmeticException, NumberFormatException { } // NG 「ignorePrivateMethods=true」なのでチェック対象ーthrowsに記述できる例外は4個まで private void privateFunc() throws CloneNotSupportedException, ClassNotFoundException, IllegalAccessException, ArithmeticException, ClassCastException { } }