「Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object.」への対応
- POST
「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)' を追加してください https://stackoverflow.com/questions/56583423/generating-equals-hashcode-implementation-but-without-a-call-to-superclass-even
本記事では、上記エラーの対応について紹介します。
警告の内容 @Dataを定義した抽象クラスを継承した子クラスは、java.lang.Objectを直接継承していないことになります。
そのため、equlesメソッドやtoStringメソッドはjava.lang.Objectのものを利用することができず、
デフォルトでは開発者が自分で実装する必要がある、ということ示した警告です。
警告を回避する方法 回避するためには継承したクラスで以下のannotationを追加することで自前での実装を避けることができます。
@EqualsAndHashCode(callSuper=true) @ToString(callSuper=true) 上記を設定することで、スーパークラスであるjava.lang.Objectを利用することができます。
おわりに Lombokの@Dataのアノテーションを親クラス・子クラスの両方に付けている際の警告への対応を紹介しました。 本記事がJavaエンジニアの参考になれば幸いです。