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

Lombok @Value注解添加自定义构造器后失效问题咨询

Lombok @Value 自定义构造器导致全参构造器缺失的问题解析与解决

问题本质

Lombok 的 @Value 注解确实等价于 @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode,但其中包含的 @AllArgsConstructor 遵循Lombok的核心规则:只要类中存在自定义构造器,Lombok就会停止自动生成全参构造器。这不是bug,是设计时为了避免构造器冲突而设定的既定行为。

解决方法

  1. 显式添加 @AllArgsConstructor 注解
    这是最直接且稳妥的方案,手动在类上添加该注解后,Lombok会忽略自定义构造器的存在,强制生成全参构造器,解决编译错误:
    @Value
    @AllArgsConstructor
    public class Foo {
        int x;
        int y;
        
        public Foo(Bar bar) {
            this(bar.getA(), bar.getB());
        }
    }
    
  2. 替代方案:使用 @Builder 简化构造逻辑(可选)
    如果不想依赖全参构造器,也可以结合 @Builder 来实现对象创建,同时保留自定义构造器:
    @Value
    @Builder
    public class Foo {
        int x;
        int y;
        
        public Foo(Bar bar) {
            this(bar.getA(), bar.getB());
        }
    }
    // 使用方式:Foo.builder().x(1).y(2).build();
    

关于配置与版本说明

  • 目前Lombok没有全局配置可以修改「自定义构造器覆盖自动生成构造器」的行为,因为这是框架的核心设计规则,无法通过配置绕过。
  • 你使用的1.18.18版本以及所有后续Lombok版本,都遵循这个行为逻辑,不属于已知bug,是官方明确的预期行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:00