Checkstyle Javaルール

CheckstyleのJavaルールについて1つずつまとめます

ThrowsCount

CheckStyle公式ドキュメント

検証環境

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 {
    }
}