最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

lombok注解@Data使用在繼承類上時(shí)出現(xiàn)警告的問題及解決

 更新時(shí)間:2024年10月23日 10:40:36   作者:吳名氏.  
Lombok的@Data注解簡(jiǎn)化了實(shí)體類代碼,但在子類中使用時(shí)會(huì)出現(xiàn)警告,指出equals和hashCode方法不會(huì)考慮父類屬性,解決方法有兩種:一是在父類上使用@EqualsAndHashCode(callSuper=true)注解;二是通過配置lombok.config文件,均能有效解決警告問題

lombok為我們提供了@Data注解,幫助我們省略了@Setter,@Getter,@ToString等注解,一般對(duì)于普通的實(shí)體類使用該注解,不會(huì)出現(xiàn)什么問題,但是當(dāng)我們把這個(gè)注解,使用在派生類上,就出現(xiàn)了一個(gè)警告

1 情景再現(xiàn)

  • 父類:
@Data
public class BaseEntity {
 
    /**
     * 公共字段主鍵id
     */
    private Integer id;
 
    /**
     * 公共字段創(chuàng)建時(shí)間
     */
    private Date createTime;
 
    /**
     * 公共字段更新時(shí)間
     */
    private Date updateTime;
 
}
  • 子類:
@Data
public class User extends BaseEntity {
 
    /**
     * 用戶名
     */
    private String username;
 
    /**
     * 密碼
     */
    private String password;
 
}

此時(shí),idea中顯示,在子類的@Data注解的地方會(huì)出現(xiàn)警告,如圖:

出現(xiàn)的警告信息:

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 '@EqualsAndHashCode(callSuper=false)' to your type.

大致意思是默認(rèn)子類的equals和hashCode方法,不會(huì)包含或者考慮基類的屬性。

我們可以通過反編譯工具查看項(xiàng)目target/classes目錄下的User.class的hashCode方法,默認(rèn)情況下屬性都是使用的他自身的屬性。

public int hashCode()
{
    int PRIME = 59;
    int result = 1;
    Object $username = getUsername();
    result = result * 59 + ($username == null ? 43 : $username.hashCode());
    Object $password = getPassword();
    result = result * 59 + ($password == null ? 43 : $password.hashCode());
    Object $mobile = getMobile();
    result = result * 59 + ($mobile == null ? 43 :     $mobile.hashCode());
    return result;
}

2 解決方案一(添加注解)

在警告的父類加上注解@EqualsAndHashCode(callSuper=true) ,警告消失

這時(shí)候,我們?cè)賮砜次覀兊腢ser.class中的hashCode方法:

public int hashCode()
{
    int PRIME = 59;
    int result = super.hashCode();
    Object $username = getUsername();
    result = result * 59 + ($username == null ? 43 : $username.hashCode());
    Object $password = getPassword();
    result = result * 59 + ($password == null ? 43 : $password.hashCode());
    Object $mobile = getMobile();
    result = result * 59 + ($mobile == null ? 43 : $mobile.hashCode());
    return result;
}

可以看出代碼中不一樣的地方,默認(rèn)情況下是int result=1,當(dāng)添加注解@EqualsAndHashCode(callSuper=true)時(shí),變成了int result=super.hashCode()。

這么一來,好像就解決了在繼承情況下使用@Data注解的警告問題。

但是問題是,每一個(gè)繼承的類,都需要這么來解決,也不是很方便。所以,lombok作者Roel也給出了解決辦法,就是通過自定義lombok.config文件來解決。

3 解決方案二(配置lombok.config)

lombok.config文件需要放在src/main/java文件夾下的目錄中(也可以放在實(shí)體同級(jí)目錄下),放在src/main/resources目錄下,不會(huì)生效。

下面,我們通過這種方式來解決這個(gè)警告的問題。

  • 3.1 新建lombok.config文件,然后配置:
config.stopBubbling=true
lombok.equalsAndHashCode.callSuper=call
  • 3.2 pom.xml文件中需要加入如下插件:
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
          <source>1.8</source>
          <target>1.8</target>
      </configuration>
</plugin>

經(jīng)過上兩步步驟警告已經(jīng)消失,如圖:

可以看到,配置生效了,然后@Data注解這里的警告也立馬消失了。

4 說明

如果父類沒添加@Data注解,子類如果要去掉警告的話,也需要在子類@EqualsAndHashCode(callSuper=true)注解

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud Webflux過濾器增加header傳遞方式

    SpringCloud Webflux過濾器增加header傳遞方式

    這篇文章主要介紹了SpringCloud Webflux過濾器增加header傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中Map的entrySet()使用說明

    Java中Map的entrySet()使用說明

    這篇文章主要介紹了Java中Map的entrySet()使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中的System.getenv()和System.getProperty()使用詳解

    Java中的System.getenv()和System.getProperty()使用詳解

    文章介紹了Java中用于讀取環(huán)境配置信息的兩種方法:System.getenv()和System.getProperty(),前者讀取系統(tǒng)環(huán)境變量,返回一個(gè)不可修改的Map;后者獲取JVM環(huán)境變量值,可以通過-D參數(shù)設(shè)置,文章還提到,通過這兩種方法可以簡(jiǎn)化配置,不需要修改代碼
    2024-11-11
  • 關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問題

    關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問題

    這篇文章主要介紹了關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java中的JetCache?實(shí)戰(zhàn)

    Java中的JetCache?實(shí)戰(zhàn)

    這篇文章主要介紹了Java中的JetCache實(shí)戰(zhàn),JetCache是一個(gè)基于Java的緩存系統(tǒng)封裝,提供統(tǒng)一的API和注解來簡(jiǎn)化緩存的使用,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢

    MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢

    本文主要介紹了MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • java中String、StringBuffer與StringBuilder的區(qū)別

    java中String、StringBuffer與StringBuilder的區(qū)別

    這篇文章主要介紹了java 中String和StringBuffer與StringBuilder的區(qū)別,在開發(fā)過程中經(jīng)常會(huì)用到String這個(gè)類進(jìn)行操作。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • Java元注解meta-annotation和依賴注入詳解

    Java元注解meta-annotation和依賴注入詳解

    這篇文章主要給大家介紹了關(guān)于Java元注解meta-annotation和依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 如何解決SpringMVC不能訪問html頁(yè)面

    如何解決SpringMVC不能訪問html頁(yè)面

    這篇文章主要介紹了如何解決SpringMVC不能訪問html頁(yè)面問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

舞阳县| 保康县| 江津市| 蓬溪县| 澜沧| 济阳县| 巩留县| 郴州市| 积石山| 丰镇市| 陇川县| 澄迈县| 奉化市| 淳化县| 怀化市| 临澧县| 资溪县| 淮南市| 鹤峰县| 大关县| 哈尔滨市| 霍林郭勒市| 仁怀市| 柘城县| 册亨县| 陆良县| 甘孜县| 石台县| 庆元县| 灵寿县| 阳信县| 颍上县| 屏东市| 黄陵县| 伊通| 东宁县| 武汉市| 安庆市| 方正县| 长寿区| 上蔡县|