解决:
@Setter @Getter @NoArgsConstructor @AllArgsConstructor @ToString(callSuper = true)
1、原因:
@Data包含了@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode。
@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量的构造方法。生成的构造方法是私有的private,不要用此。特殊需求自己写。
@Accessors:设置前缀。如:@Accessors(prefix = “abc”) private String abcAge 当生成get/set方法时,会把此前缀去掉。
@EqualsAndHashCode:默认仅使用该类中定义的属性且不调用父类的方法,可通过callSuper=true解决。
2、不管用@Data还是@Setter时,加上@EqualsAndHashCode都会报“缺少@Overide”错误。
以后用到比较对象时,采用id比较,如果非要比较全字段时,自行实现,如
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}