IDEA 使用 lombak 时的一个小警告:Generating equals/hashCode implementation but without a call to superclass

简介: 今日在IDEA中使用Lombok时遇到@Data注解的黄色警告,提示equals和hashCode未调用父类方法。虽不影响运行,但影响美观。可通过@EqualsAndHashCode(callSuper = true)或在lombok.config中配置默认行为解决,推荐后者统一管理,彻底消除警告。

今天在idea 中 使用lombak时发现了一个警告,虽然不影响正常编译和代码执行,但是那条黄色波浪线实在让人不舒服,今天就来消除它吧
警告如图所示:
截屏2025-10-09 20.35.14.png

警告的含义

当我们在一个子类上使用@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/
相关文章
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
1122 0
|
Java 数据库连接 C++
Intellij IDEA 如何去掉 @Autowired 注入警告
Intellij IDEA 如何去掉 @Autowired 注入警告
569 0
|
消息中间件 JavaScript 小程序
使用 @Autowired 为什么会被 IDEA 警告,应该怎么修改最佳?
使用 @Autowired 为什么会被 IDEA 警告,应该怎么修改最佳?
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
1813 0
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
|
Java 编译器 Spring
IDEA 出现问题:出现private field ‘xxx‘ is never assigned警告解决方案
IDEA 出现问题:出现private field ‘xxx‘ is never assigned警告解决方案
1361 0
IDEA 出现问题:出现private field ‘xxx‘ is never assigned警告解决方案
IDEA 解决Number objects are compared using '==', not 'equals()' 警告
IDEA 解决Number objects are compared using '==', not 'equals()' 警告
|
存储
IDEA 告警Unpredictable ‘new BigDecimal()‘ call
IDEA 告警Unpredictable ‘new BigDecimal()‘ call
419 0
|
API
IDEA 告警:Stream API call chain can be simplified
IDEA 告警:Stream API call chain can be simplified
262 0
IDEA黄色警告解析集锦 - 类名【xxx】应以Impl结尾
IDEA黄色警告解析集锦 - 类名【xxx】应以Impl结尾
518 0
|
6月前
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
417 27