@EqualsAndHashCode 默認不繼承父類
修復此問題的方法很簡單:
1. 使用@Getter @Setter @ToString代替@Data並且自定義equals(Object other) 和 hashCode()方法,比如有些類只需要判斷主鍵id是否相等即足矣。
2. 或者使用在使用@Data時同時加上@EqualsAndHashCode(callSuper=true)注解。
為什么使用lombok 的@Data 注解的時候會出現警告提示?
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 '(callSuper=false)' to your type.
even though this class does not extend java.lang.Object.
If this is intentional, add '(callSuper=false)' to your type.
@Data
//當子類繼承父類之后 如果存在相同屬性則會出現此問題
@ToString
public
class
BusinessException
extends
RuntimeException
{
}
首先要知道: @Data注解包含了這些注解
@see
Getter
@see
Setter
@see
RequiredArgsConstructor
@see
ToString
@see
EqualsAndHashCode
@see
lombok
.
Value
1. 此注解會生成equals(Object other) 和 hashCode()方法。
2. 它默認使用非靜態,非瞬態的屬性
3. 可通過參數exclude排除一些屬性
4. 可通過參數of指定僅使用哪些屬性
5. 它默認僅使用該類中定義的屬性且不調用父類的方法
6. 可通過callSuper=true解決上一點問題。讓其生成的方法中調用父類的方法。
2. 它默認使用非靜態,非瞬態的屬性
3. 可通過參數exclude排除一些屬性
4. 可通過參數of指定僅使用哪些屬性
5. 它默認僅使用該類中定義的屬性且不調用父類的方法
6. 可通過callSuper=true解決上一點問題。讓其生成的方法中調用父類的方法。
另:@Data相當於@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode這5個注解的合集。
因為@EqualsAndHashCode默認不繼承父類 就是說 重寫hashcode和equals的時候 不包含父類的字段值,所有只會比較自己對象里面的字段值 顯然這是錯誤的
