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

java中l(wèi)ombok的@Data引發(fā)問題詳解

 更新時(shí)間:2020年09月08日 09:43:07   作者:張占嶺 lind  
這篇文章主要給大家介紹了關(guān)于java中l(wèi)ombok的@Data引發(fā)問題的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

我們問題lombok是可以精簡(jiǎn)我們的代碼的,讓開發(fā)人員把精力放在業(yè)務(wù)上,而它封裝的注解我們?cè)谑褂脮r(shí),需要多注意一下;@Data注解它是一個(gè)混合注釋,它包含了@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode的功能,而我們問題@EqualsAndHashCode是重寫equals和hash的注釋,如果你是一個(gè)類,那可以不關(guān)心它;而如果你的類中有繼承(父類子類),那么就要注意一下了。

危險(xiǎn)的@Data

子類不能完全代表父類

@EqualsAndHashCode注解里有個(gè)字段callSuper,它的默認(rèn)值是false,意思是在重寫時(shí),不會(huì)將父類的字段寫到equals里;而@Data這個(gè)注解由于包含了@EqualsAndHashCode,所以它也有這個(gè)特性,即子類強(qiáng)制實(shí)現(xiàn)了重寫equals和hashCode,并且只重寫了自己的屬性,這時(shí),問題就來了,當(dāng)兩個(gè)對(duì)象比較時(shí),如果子類屬性相同而父類屬性不同,結(jié)果也為true,這是非常嚴(yán)重的bug。

定義兩種類,基類People,和兩個(gè)子類Man和Woman

 @Data
 class Person {
 String name;
 }

 @Data
 //重寫時(shí)帶上父類字段
 @EqualsAndHashCode(callSuper = true)
 class Man extends Person {
 Boolean hunting;
 }

 @Data
 //重寫equals時(shí)不會(huì)帶上父類的字段,同種類型比較時(shí),當(dāng)子類字段相同時(shí),結(jié)果就為true,這顯然是不準(zhǔn)確的.
 @EqualsAndHashCode(callSuper = false)
 class Woman extends Person {
 Boolean spin;
 }

測(cè)試的結(jié)果,我們是可以猜出來的,父類里的字段不相同時(shí),結(jié)果應(yīng)該為false,但如果 @EqualsAndHashCode(callSuper = false),結(jié)果竟然是true,這也是正常的,因?yàn)樗]有重寫父類的屬性name,所以只要子類字段相同,結(jié)果就認(rèn)為相同了。

 @Test
 public void supperSubEqual() {
 Man man = new Man();
 man.setName("zzl");
 man.setHunting(true);
 Man man1 = new Man();
 man1.setHunting(true);
 man1.setName("lind");
 log.info("man==man1 ? {}", man.equals(man1)); // false

 Woman woman = new Woman();
 woman.setName("zzl");
 woman.setSpin(true);
 Woman woman1 = new Woman();
 woman1.setSpin(true);
 woman1.setName("lind");
 log.info("woman==woman1 ? {}", woman.equals(woman1)); // true
 }

總結(jié)

在使用@Data時(shí),我們盡量把 @EqualsAndHashCode(callSuper = true)加上,因?yàn)槟悴患?,它相?dāng)于是false;或者杜絕使用@Data,而用@Getter,@Setter,@ToString代替它。

到此這篇關(guān)于java中l(wèi)ombok的@Data引發(fā)問題的文章就介紹到這了,更多相關(guān)java lombok的@Data引發(fā)問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Validation Api如何實(shí)現(xiàn)自定義注解

    Java Validation Api如何實(shí)現(xiàn)自定義注解

    這篇文章主要介紹了Java Validation Api如何實(shí)現(xiàn)自定義注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 在eclipse中安裝Scala環(huán)境的步驟詳解

    在eclipse中安裝Scala環(huán)境的步驟詳解

    這篇文章主要介紹了在eclipse中安裝Scala環(huán)境的步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • idea引入外部jar包的方法實(shí)現(xiàn)

    idea引入外部jar包的方法實(shí)現(xiàn)

    本文主要介紹了idea引入外部jar包的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java注解中@Component和@Bean的區(qū)別

    Java注解中@Component和@Bean的區(qū)別

    這篇文章主要介紹了@Component和@Bean的區(qū)別,在這給大家簡(jiǎn)單介紹下作用對(duì)象不同:@Component 注解作用于類,而 @Bean 注解作用于方法,具體實(shí)例代碼參考下本文
    2024-03-03
  • Java 詳解單向加密--MD5、SHA和HMAC及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    Java 詳解單向加密--MD5、SHA和HMAC及簡(jiǎn)單實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了Java 詳解單向加密--MD5、SHA和HMAC及簡(jiǎn)單實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn)

    Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn)

    在復(fù)雜的數(shù)據(jù)庫查詢中,處理空值關(guān)聯(lián)是一項(xiàng)常見的需求,本文就來介紹一下Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 淺談JAVA并發(fā)之ReentrantLock

    淺談JAVA并發(fā)之ReentrantLock

    本文主要介紹了基于AQS實(shí)現(xiàn)的ReentrantLock(重入鎖),感興趣的同學(xué),可以參考下。
    2021-06-06
  • 解決IDEA報(bào)錯(cuò)java無效的目標(biāo)發(fā)行版:22

    解決IDEA報(bào)錯(cuò)java無效的目標(biāo)發(fā)行版:22

    在使用IDEA編譯項(xiàng)目時(shí),可能會(huì)遇到JDK版本不一致的錯(cuò)誤,這篇文章主要介紹了解決IDEA報(bào)錯(cuò)java無效的目標(biāo)發(fā)行版:22的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Java中關(guān)于Collections集合工具類的詳細(xì)介紹

    Java中關(guān)于Collections集合工具類的詳細(xì)介紹

    Java提供了一個(gè)操作Set、List和Map等集合的工具類:Collections,該工具提供了大量方法對(duì)集合元素進(jìn)行排序、查詢和修改等操作,還提供了將集合對(duì)象設(shè)置為不可變、對(duì)集合對(duì)象實(shí)現(xiàn)同步控制等方法
    2021-09-09
  • mybatis 返回Map類型key改為小寫的操作

    mybatis 返回Map類型key改為小寫的操作

    這篇文章主要介紹了mybatis 返回Map類型key改為小寫的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評(píng)論

资兴市| 民勤县| 长垣县| 周宁县| 大宁县| 扶绥县| 松潘县| 小金县| 玉山县| 通道| 潼关县| 中方县| 磐石市| 霍州市| 杭州市| 肇源县| 阳西县| 民勤县| 边坝县| 澳门| 泸定县| 扶余县| 鸡西市| 肇东市| 凉山| 台中县| 大埔区| 南溪县| 台州市| 名山县| 丽水市| 白玉县| 康平县| 郸城县| 清原| 宜章县| 锡林郭勒盟| 龙山县| 江华| 昆山市| 南平市|