@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的时候 不包含父类的字段值,所有只会比较自己对象里面的字段值 显然这是错误的