【java-Err】 Generating equals/hashCode implementation but without a call to superclass,


@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. 

@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解決上一點問題。讓其生成的方法中調用父類的方法。
另:@Data相當於@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode這5個注解的合集。
因為@EqualsAndHashCode默認不繼承父類 就是說 重寫hashcode和equals的時候 不包含父類的字段值,所有只會比較自己對象里面的字段值  顯然這是錯誤的


免責聲明!

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



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