FindBugs提示EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC缺陷如何解决

问题描述

通过findbugs检测出的问题

EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC

equals method overrides equals in superclass and may not be symmetric

描述:equals方法覆盖了父类的equals,可能功能不符实际。

@Data
public class InfoParam extends BasePageParam {
    private String placeName;
}

问题分析

这种问题出现于实体之间的继承,而且每个类都使用@Data的注解

官方文档:@EqualsAndHashCode

原文中提到的大致有以下几点:
1. 此注解会生成equals(Object other) 和 hashCode()方法。
2. 它默认使用非静态,非瞬态的属性
3. 可通过参数exclude排除一些属性
4. 可通过参数of指定仅使用哪些属性
5. 它默认仅使用该类中定义的属性且不调用父类的方法
6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。

另:@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

通过官方文档,可以得知,当使用@Data注解时,则有了@EqualsAndHashCode注解,那么就会在此类中存在equals(Object other) 和 hashCode()方法,且不会使用父类的属性,这就导致了可能的问题。
比如,有多个类有相同的部分属性,把它们定义到父类中,恰好id(数据库主键)也在父类中,那么就会存在部分对象在比较时,它们并不相等,却因为lombok自动生成的equals(Object other) 和 hashCode()方法判定为相等,从而导致出错。

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

注解讲解https://www.cnblogs.com/weirdo-lenovo/p/10789351.html

问题解决

使用@EqualsAndHashCode(callSuper=true)注解

问题检查

  1. 插件市场安装FindBugs;
  2. 重启idea;
  3. 因插件安装导致项目报错
最近添加代码审查工具 findbugs,本来项目正常,但是安装后,重新编译项目报

Malformed argument has embedded quote

查找后按以下方法可以编译正常

在Help 中选择 Edit Custom VM Options
配置内容里添加一行
-Djdk.lang.Process.allowAmbiguousCommands=true
之后重启 IDEA,问题就能解决.
  1. 点击tools中的findbugs插件,扫描后会右下方的缺陷,修改后重复操作数量减少
    在这里插入图片描述
缺陷的描述
Id

EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC

Description

This class defines an equals method that overrides an equals method in a superclass. Both equals methods methods use instanceof in the determination of whether two objects are equal. This is fraught with peril, since it is important that the equals method is symmetrical (in other words, a.equals(b) == b.equals(a)). If B is a subtype of A, and A's equals method checks that the argument is an instanceof A, and B's equals method checks that the argument is an instanceof B, it is quite likely that the equivalence relation defined by these methods is not symmetric.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值