Checkstyle Javaルール

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

EqualsHashCode

CheckStyle公式ドキュメント

検証環境

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


チェック概要

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

equals()またはhashCode()をオーバーライドするクラスが、もう一方もオーバーライドされていることをチェックする。
このチェックでは、メソッド宣言がObject.equals(Object)およびObject.hashCode()と正確に一致することのみを確認する。
このチェックでは、無効なメソッド名、Object 以外のパラメータ、またはその他のものは検証されない。

理由:equals()とhashCode()では、等しいオブジェクトが同じhashCodeを持つことが必要となる。
したがって、equals()をオーバーライドするときは必ずhashCode()をオーバーライドして、ハッシュベースのコレクションでクラスを使用できるようにする必要がある。

設定+チェック実行結果

設定ファイル記述方法

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

チェック実行例

// NG equals(Object)のオーバーライドがない
public static class Example1 {
    public int hashCode() {
    }
    
    public boolean equals(String o) {
    }
}

// NG hashCode()のオーバーライドがない
public static class Example2 {
    public boolean equals(Object o) {
    }
    
    public boolean equals(String o) {
    }
}

// OK
public static class Example3 {
    public int hashCode() {
    }
    
    public boolean equals(Object o) { 
    }
    
    public boolean equals(String o) {
    }
}