「Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object.」への対応
はじめに
Lombokの@Dataのアノテーションを親クラス・子クラスの両方に付けている際に、にビルド時に以下の警告メッセージが表示されます。
Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.
↓和訳
equals/hashCode の実装を生成しているが、superclass を呼び出していない
このクラスは java.lang.Object を継承していないにもかかわらずです
もしこれが意図的なものであれば、型に '@EqualsAndHashCode(callSuper=false)' を追加してください
本記事では、上記エラーの対応について紹介します。
警告の内容
@Dataを定義した抽象クラスを継承した子クラスは、java.lang.Objectを直接継承していないことになります。
そのため、equlesメソッドやtoStringメソッドはjava.lang.Objectのものを利用することができず、
デフォルトでは開発者が自分で実装する必要がある、ということ示した警告です。
警告を回避する方法
回避するためには継承したクラスで以下のannotationを追加することで自前での実装を避けることができます。
@EqualsAndHashCode(callSuper=true)
@ToString(callSuper=true)
上記を設定することで、スーパークラスであるjava.lang.Objectを利用することができます。
おわりに
Lombokの@Dataのアノテーションを親クラス・子クラスの両方に付けている際の警告への対応を紹介しました。 本記事がJavaエンジニアの参考になれば幸いです。