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
相关产品推荐
相关产品推荐

