使用lombok插件,编译后告警提示@EqualsAndHashCode(callSuper=false)

一、描述

  • 如果没有继承,仅对一个类加上@Data,不会有告警提示设置@EqualsAndHashCode(callSuper=false);
  • 但存在继承,就会有告警提示,如下:

用户实体类User,继承实体基类BaseEntity

package com.runlw.coody.test.entity;

import lombok.Data;

@Data
public class User  extends BaseEntity{
    private String userName;
    private String password;
}
package com.runlw.coody.test.entity;

import lombok.Data;

import java.util.Date;

@Data
public class BaseEntity {
    private Integer id;
    private Date createdDate;
    private Date updateedDate;
}

编译后,出现:

 二、分析

如果在User类上加上注解@EqualsAndHashCode(callSuper = true)

package com.runlw.coody.test.entity;

import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper = true)
@Data
public class User  extends BaseEntity{
    private String userName;
    private String password;
}

查看编译后的class,发现会多一个if (!super.equals(o)) 判断

可以去掉注解@EqualsAndHashCode(callSuper = true),或者设置为false(默认值),将编译后的class进行对比

三、解决方案

1.如果比较两个对象时应考虑超类中的成员,请使用@EqualsAndHashCode(callSuper=true),才能正确比较

2.如果只是想在当前类比较字段,可以使用@EqualsAndHashCode(callSuper=false),或者不适用此注解,它是默认选项

3.设置 lombok 全局属性,在src/main/java 目录下创建 lombok.config 文件。【注:一定要在src/main/java 目录下创建才有效】

# 声明该配置文件是一个根配置文件,从该配置文件所在的目录开始扫描
config.stopBubbling=true
# 全局配置 equalsAndHashCode 的 callSuper 属性为true
lombok.equalsAndHashCode.callSuper=call

 总结:

  推荐使用注解@EqualsAndHashCode,因为可以区分哪些需要比较父类成员,哪些不需要比较父类成员;如果全部要比较 或 全部不需要比较 父类成员,则使用全局配置 lombok.config

猜你喜欢

转载自www.cnblogs.com/lwcode6/p/12970582.html