You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中Lombok @Value类与NonNullByDefault冲突报错的解决咨询

解决Lombok @Value注解与Eclipse空值检查的冲突问题

环境与配置

  • 基于Eclipse的Spring Tool Suite 4.18.0
  • Lombok v1.18.26

lombok.config配置内容

config.stopBubbling = true 
lombok.addLombokGeneratedAnnotation = true
lombok.noArgsConstructor.extraPrivate = false
lombok.addNullAnnotations = eclipse

package-info.java配置

@org.eclipse.jdt.annotation.NonNullByDefault
package bb.b;

测试类代码

package bb.b;

import lombok.Value;

@Value
public class Test {

}

错误提示

Illegal redefinition of parameter o, inherited method from Object does not constrain this parameter
中文翻译:非法重定义参数o,从Object继承的方法未对该参数施加约束

解决方案

这个问题源于Lombok生成的equals(Object o)方法,与包级别@NonNullByDefault注解的空值规则冲突:Object类的equals方法允许参数为null,但@NonNullByDefault会强制要求参数非空,而Lombok生成的equals方法未显式覆写该约束,触发了Eclipse JDT的空值检查报错。

以下是几种可行的解决方式:

方式一:修改lombok.config配置

在现有lombok.config中添加配置,让Lombok生成equals/hashCode时忽略空值注解约束:

# 让equals/hashCode调用父类方法,同时不强制参数非空
lombok.equalsAndHashCode.callSuper = call
lombok.equalsAndHashCode.nonNullParameters = false

# 或者针对equals/hashCode单独禁用空值注解生成
lombok.addNullAnnotations = eclipse
lombok.equalsAndHashCode.addNullAnnotations = false

方式二:在类级别覆盖空值默认规则

在Test类上添加@NullableByDefault注解,覆盖包级别的@NonNullByDefault,解除对equals方法参数的非空强制:

package bb.b;

import lombok.Value;
import org.eclipse.jdt.annotation.NullableByDefault;

@Value
@NullableByDefault
public class Test {

}

方式三:调整Eclipse空值检查设置

打开STS的Window > Preferences > Java > Code Style > Null Analysis,找到Inherited method parameters选项,将其设置为Do not override,这样JDT就不会因为继承方法的参数约束不一致而抛出错误。

内容的提问来源于stack exchange,提问作者kulatamicuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:22:47