【java-Err】 Generating equals/hashCode implementation but without a call to superclass,

@EqualsAndHashCode  默认不继承父类

修复此问题的方法很简单: 


1. 使用@Getter @Setter @ToString代替@Data并且自定义equals(Object other) 和 hashCode()方法,比如有些类只需要判断主键id是否相等即足矣。
2. 或者使用在使用@Data时同时加上@EqualsAndHashCode(callSuper=true)注解。

为什么使用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 '(callSuper=false)' to your type. 

@Data//当子类继承父类之后 如果存在相同属性则会出现此问题
@ToString
public class BusinessException extends RuntimeException {

}

 首先要知道: @Data注解包含了这些注解
 @see Getter
 @see Setter
 @see RequiredArgsConstructor
 @see ToString
 @see EqualsAndHashCode
 @see lombok.Value
1. 此注解会生成equals(Object other) 和 hashCode()方法。
2. 它默认使用非静态,非瞬态的属性
3. 可通过参数exclude排除一些属性
4. 可通过参数of指定仅使用哪些属性
5. 它默认仅使用该类中定义的属性且不调用父类的方法
6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
另:@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
因为@EqualsAndHashCode默认不继承父类 就是说 重写hashcode和equals的时候 不包含父类的字段值,所有只会比较自己对象里面的字段值  显然这是错误的

posted @   不良徐某  阅读(4631)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示