検証環境
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) { } }