開發遇到@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就行