記一次 EqualsAndHashCode的疑惑

2021-09-25 14:45:55 字數 1148 閱讀 9506

lombok的使用真的是讓開發人員欲罷不能,乙個@data不管有多少屬性全部搞定,以後加字段也不用從新生成get和set方法。不過這裡還是有乙個小坑需要注意一下,舉個例子:

public

class

equalsandhashcodetest

@data

@noargsconstructor

@accessors

(chain =

true

)public

class

resource

extends

basepo

@data

@noargsconstructor

@accessors

(chain =

true

)public

class

resource1

public

void

test()

public

static

void

main

(string[

] args)

}

看下列印:

resource1 hashcode :

1342316317

resource2 hashcode :

1342316317

true

我們明明建立了兩個不同物件,但是的出來的hashcode確相同,是不是很悲催。

@data相當於@getter @setter @requiredargsconstructor @tostring @equalsandhashcode這5個註解的合集。其中@equalsandhashcode這個屬性重寫hashcode和equals方法,它預設是不新增父類屬性的重寫,所以如果繼承父類時候使用@data需要加上@equalsandhashcode(callsuper = true)新增上父類屬性重寫hashcode和equals。

resource1 hashcode :

-496642359

resource2 hashcode :

-839607981

false

這才是我們想要的結果。

記一次除錯

這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...

記一次除錯

這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...

記一次面試

最近面試經常碰到這樣一道題 或者類似 ps.因為我阿姨不會就詳細分析吧。var btns document.getelementsbyclassname btn for let i 0 i btns.length i 這個之前說過,因為面試的時候,說了主要看閉包。所以也沒有多想。function f...