Checkstyle Javaルール

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

ExplicitInitialization

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

クラスまたはオブジェクトのメンバが明示的にその型のデフォルト値に初期化されているかどうかをチェックする。
オブジェクトの場合はnull、数値型およびcharの場合は0、booleanの場合はfalse。
インスタンス変数は、同じ値で2回初期化されることになるので非効率。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
onlyObjectReferences boolean false オブジェクトのNULLへの明示的な初期化のみをチェックするかどうか 7.8

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

public class MyClass {
    // NG intのデフォルト値で明示的に初期化しない
    private int intField1 = 0;
    // OK
    private int intField2 = 1;
    // OK
    private int intField3;
    
    // NG objectのデフォルト値で明示的に初期化しない
    private Obj objField1 = null;
    // OK
    private Obj objField2 = new Obj();
    // OK
    private Obj objField3;
}

プロパティ設定あり

onlyObjectReferences

trueを設定した場合、オブジェクトのNULLへの明示的な初期化のみをチェックする(デフォルト:false)

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="ExplicitInitialization">
            <property name="onlyObjectReferences" value="true"/>
        </module>
    </module>
</module>

チェック実行例

public class MyClass {
    // OK 「onlyObjectReferences=true」なのでチェックされない
    private int intField1 = 0;
    // OK
    private int intField2 = 1;
    // OK
    private int intField3;
    
    // NG objectのデフォルト値で明示的に初期化しない
    private Obj objField1 = null;
    // OK
    private Obj objField2 = new Obj();
    // OK
    private Obj objField3;
}