亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

lombok為我們提供了@Data注解,幫助我們省略了@Setter,@Getter,@ToString等注解,一般對(duì)于普通的實(shí)體類使用該注解,不會(huì)出現(xiàn)什么問(wè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ì)包含或者考慮基類的屬性。

我們可以通過(guò)反編譯工具查看項(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è)賮?lái)看我們的User.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()。

這么一來(lái),好像就解決了在繼承情況下使用@Data注解的警告問(wèn)題。

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

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

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

下面,我們通過(guò)這種方式來(lái)解決這個(gè)警告的問(wèn)題。

  • 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)過(guò)上兩步步驟警告已經(jīng)消失,如圖:

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

4 說(shuō)明

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

總結(jié)

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

相關(guān)文章

  • 詳解使用Spring的restTemplete進(jìn)行Http請(qǐng)求

    詳解使用Spring的restTemplete進(jìn)行Http請(qǐng)求

    本篇文章主要介紹了詳解使用Spring的restTemplete進(jìn)行Http請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java在文件尾部追加內(nèi)容的簡(jiǎn)單實(shí)例

    java在文件尾部追加內(nèi)容的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇java在文件尾部追加內(nèi)容的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Spring?Cloud?Eureka基礎(chǔ)應(yīng)用及原理

    Spring?Cloud?Eureka基礎(chǔ)應(yīng)用及原理

    這篇文章主要介紹了Spring?Cloud?Eureka基礎(chǔ)應(yīng)用,Eureka?Client中內(nèi)置一個(gè)負(fù)載均衡器,用來(lái)進(jìn)行基本的負(fù)載均衡,下面我們將通過(guò)搭建一個(gè)簡(jiǎn)單的Eureka例子來(lái)了解Eureka的運(yùn)作原理,感興趣的朋友一起看看吧
    2022-05-05
  • 解決IDEA中下載free maven plugin插件無(wú)效的問(wèn)題

    解決IDEA中下載free maven plugin插件無(wú)效的問(wèn)題

    這篇文章主要介紹了解決IDEA中下載free maven plugin插件無(wú)效的問(wèn)題,本文通過(guò)圖文并茂的形式給大家分享解決方案,供大家參考,需要的朋友可以參考下
    2020-11-11
  • Java ArrayList與LinkedList使用方法詳解

    Java ArrayList與LinkedList使用方法詳解

    Java中容器對(duì)象主要用來(lái)存儲(chǔ)其他對(duì)象,根據(jù)實(shí)現(xiàn)原理不同,主要有3類常用的容器對(duì)象:ArrayList使用數(shù)組結(jié)構(gòu)存儲(chǔ)容器中的元素、LinkedList使用鏈表結(jié)構(gòu)存儲(chǔ)容器中的元素
    2022-11-11
  • Spring的RedisTemplate存儲(chǔ)的key和value有特殊字符的處理

    Spring的RedisTemplate存儲(chǔ)的key和value有特殊字符的處理

    這篇文章主要介紹了Spring的RedisTemplate存儲(chǔ)的key和value有特殊字符的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用Mybatis的Batch?Insert?Support?實(shí)現(xiàn)批量插入

    使用Mybatis的Batch?Insert?Support?實(shí)現(xiàn)批量插入

    這篇文章主要介紹了使用Mybatis的Batch?Insert?Support?實(shí)現(xiàn)批量插入。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java多線程——基礎(chǔ)概念

    Java多線程——基礎(chǔ)概念

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下,希望可以幫到你
    2021-07-07
  • Java調(diào)用IK分詞器進(jìn)行分詞方式,封裝工具類

    Java調(diào)用IK分詞器進(jìn)行分詞方式,封裝工具類

    這篇文章主要介紹了Java調(diào)用IK分詞器進(jìn)行分詞方式,封裝工具類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例

    Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例

    這篇文章主要為大家介紹了Springboot結(jié)合JDBC實(shí)現(xiàn)雙數(shù)據(jù)源實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論