Checkstyle Javaルール

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

MethodName

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

メソッド名が指定の正規表現にマッチしているがどうかをチェックする。

クラス名と同じ名前のメソッドが存在するかあるかどうかもチェックする。デフォルトではメソッド名とクラス名が同じものは許可されない。
オーバーライドされたメソッドの名前はチェック対象外。

Javaでは、クラスと同じ名前のメソッドを持つことは可能である。クラスと同名のメソッドは、コンストラクタと混同されやすいためチェックをしている。
オーバーライドされたメソッドの名前をチェックしないのは、開発者がそのようなメソッドの名前を変更する選択肢を持っていないためである。

プロパティ

プロパティ デフォルト値 説明 追加バージョン
format Pattern "^[a-z][a-zA-Z0-9]*$" メソッド名の正規表現 3.0
allowClassName boolean false クラス名と同じ名前のメソッドを許可するかどうか 5.0
applyToPublic boolean true publicメソッドにチェックを適用するかどうか 5.1
applyToProtected boolean true protectedメソッドにチェックを適用するかどうか 5.1
applyToPackage boolean true package-privateメソッドにチェックを適用するかどうか 5.1
applyToPrivate boolean true privateメソッドにチェックを適用するかどうか 5.1

設定+チェック実行結果

プロパティ設定なし

設定ファイル記述方法

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

チェック実行例

class MyClass {
    // OK
    public void firstMethod1() {
    }
    
    // OK
    protected void secondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    public void fourth_Method4() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}

プロパティ設定あり

format

メソッド名の正規表現

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="format" value="^A[a-z][a-zA-Z0-9]*$"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // NG メソッド名の正規表現にマッチしない
    public void firstMethod1() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    protected void secondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    public void fourth_Method4() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}

allowClassName

クラス名と同じ名前のメソッドを許可するかどうか
デフォルト:false

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="allowClassName" value="true"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // OK
    public void firstMethod1() {
    }
    
    // OK
    protected void secondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    public void fourth_Method4() {
    }
    
    // OK 「allowClassName=true」なのでOK
    public void MyClass() {
    }
}

applyToPublic

publicメソッドにチェックを適用するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="applyToPublic" value="false"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // OK 「applyToPublic=false」なのでチェック対象外
    public void FirstMethod1() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    protected void SecondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void FourthMethod() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}

applyToProtected

Protectedメソッドにチェックを適用するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="applyToProtected" value="false"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // NG メソッド名の正規表現にマッチしない
    public void FirstMethod1() {
    }
    
    // OK 「applyToProtected=false」なのでチェック対象外
    protected void SecondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void FourthMethod() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}

applyToPackage

Package-Privateメソッドにチェックを適用するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="applyToPackage" value="false"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // NG メソッド名の正規表現にマッチしない
    public void FirstMethod1() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    protected void SecondMethod() {
    }
    
    // OK 「applyToPackage=false」なのでチェック対象外
    void ThirdMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    private void FourthMethod() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}

applyToPrivate

Privateメソッドにチェックを適用するかどうか
デフォルト:true

設定ファイル記述方法

<module name="Checker">
    <module name="TreeWalker">
        <module name="MethodName">
            <property name="applyToPrivate" value="false"/>
        </module>
    </module>
</module>

チェック実行例

class MyClass {
    // NG メソッド名の正規表現にマッチしない
    public void FirstMethod1() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    protected void SecondMethod() {
    }
    
    // NG メソッド名の正規表現にマッチしない
    void ThirdMethod() {
    }
    
    // OK 「applyToPrivate=false」なのでチェック対象外
    private void FourthMethod() {
    }
    
    // NG クラス名と同じメソッド名
    public void MyClass() {
    }
}