使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM