Checkstyle Javaルール

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

AvoidNestedBlocks

CheckStyle公式ドキュメント

検証環境

Checkstyleバージョン:10.3.3
Javaバージョン:17


チェック概要

チェック追加バージョン
Checkstyle 3.1

ネストされたブロック(コード内で自由に使用されているブロック)がないかどうかをチェックする。

switch文のcaseはブロックを形成していないため、caseスコープを持つローカル変数を宣言するには、ネストされたブロックを記述する必要がある。
しかし、デフォルトの設定ではネストしたブロックはこのチェックで検出されてしまう。
allowInSwitchCaseプロパティをtrueに設定することでswitchのcase内のブロックを記述することができるようになる。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
allowInSwitchCase boolean false switchのcase内のブロックを許可するかどうか 3.2

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AvoidNestedBlocks"/>
    </module>
</module>

チェック実行例

public class MyClass {
    public void foo() {
        int myInteger = 0;

        // NG
        {
            myInteger = 2;
        }

        System.out.println("myInteger = " + myInteger);

        switch (a) {
            case 1:
                // NG
                {
                    System.out.println("Case 1");
                    break;
                }
            case 2:
                System.out.println("Case 2");
                break;
        }
    }
}

プロパティ設定あり

allowInSwitchCase

trueを設定した場合、switchのcase内にブロックを記述することができる。

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="AvoidNestedBlocks">
            <property name="allowInSwitchCase" value="true"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {
    public void foo() {
        int myInteger = 0;

        // NG
        {
            myInteger = 2;
        }

        System.out.println("myInteger = " + myInteger);

        switch (a) {
            case 1:
                // OK 「allowInSwitchCase=true」なのでcaseの中にブロックを記述可能
                {
                    System.out.println("Case 1");
                    break;
                }
            case 2:
                System.out.println("Case 2");
                break;
        }
    }
}