Lombok中@Data注解的坑


開發遇到@Data注解的大坑

如果使用@Data注解,會默認重寫hashcode和equals方法

那會遇到什么問題呢?

比如說:

@Data
public class DataTest {
    private int code;

    private String name;

    public DataTest(int code, String name){
        this.code = code;
        this.name = name;
    }

    public static void main(String args[]){
        DataTest dataTest1 = new DataTest(1,"name");
DataTest dataTest2
= new DataTest(1,"name");
System.
out.println(dataTest1 == dataTest2);
Map
<DataTest,String> dataTestStringMap = new HashMap<>();
dataTestStringMap.put(dataTest1,dataTest1.getName());
dataTestStringMap.put(dataTest2,dataTest2.getName());
System.
out.println(dataTestStringMap.size()); } }

 結果返回:

false

1

問題來了:兩個對象地址不一樣,但是用map保存的時候,hashMap卻判斷key相等了,所以size執行出來是1

出現關鍵原因在於@Data注解默認包含@EqualsAndHashCode注解,重寫了hashCode和equals方法,導致了所有屬性相同情況下hashcode相同,所以hashmap認為是同一個key。

@Data內部包含多個針對實體類的注解,所以建議大家盡量按需使用,如果單獨只是為了少寫get和set方法只用@Getter和@Setter就行

 


免責聲明!

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



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