zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    JS函数的定义与调用方法
    一次完整的浏览器请求流程
    【前端安全】JavaScript防http劫持与XSS
    深入理解display属性
    前端开发人员需要了解的CSS原理
    第 10 章 文件系统及实现
    第 9 章 虚拟内存管理
    第 8 章 内存管理策略
    第 7 章 死锁
    第 6 章 同步
  • 原文地址:https://www.cnblogs.com/lwcode6/p/12970582.html
Copyright © 2011-2022 走看看