今天在idea 中 使用lombak时发现了一个警告,虽然不影响正常编译和代码执行,但是那条黄色波浪线实在让人不舒服,今天就来消除它吧
警告如图所示:
警告的含义
当我们在一个子类上使用@Data注解时,idea 就是出现这个警告;
这个警告是在告诉我们:Lombok正在生成的equals和hashCode方法没有调用父类的对应方法。
并且IDEA 还非常人性化的给我们提出了提升,如果父类是java.lang.Object,通常不需要调用super,因为Object的equals方法默认比较对象引用,hashCode方法返回系统生成的哈希码。在这种情况下,可以明确设置callSuper = false来消除警告
解决办法
方案1:使用callSuper参数
Lombok的@EqualsAndHashCode注解提供了一个callSuper参数,用于指定是否在生成的代码中包含对父类equals和hashCode方法的调用。
// 正确的用法
@EqualsAndHashCode(callSuper = true)
public class Employee extends Person {
private String employeeId;
private String department;
// 其他代码...
}
这样生成的equals方法会类似:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
Employee employee = (Employee) o;
return Objects.equals(employeeId, employee.employeeId) &&
Objects.equals(department, employee.department);
}
但是这种方式需要我们在每一个类上都要加上这个注解,有些微麻烦
方案二: Lombok配置文件
可以在项目的lombok.config文件中设置默认行为:
# 设置默认的callSuper行为
lombok.equalsAndHashCode.callSuper = call
这个文件可以放在根目录下,
src/main/java/
└── com/
└── lombok.config
也可以放在对应实体类的包名下
src/main/java/
└── com/
└── company/
├── entity/
│ └── lombok.config # 实体类特殊配置
├── dto/
│ └── lombok.config # DTO特殊配置
└── service/