使用Lombok @SuperBuilder子类继承父类属性失效的解决方法
解决Lombok @SuperBuilder父类属性未被识别的问题
当使用Lombok的@SuperBuilder实现继承类的构建时,子类Builder不会直接暴露父类的属性设置方法,必须通过特定语法初始化父类属性,这是@SuperBuilder的分层Builder设计逻辑导致的。
解决方案
方法1:兼容所有Lombok版本的标准写法
修改Main类中构建CChild的代码,通过super()进入父类Builder上下文设置父类属性,完成后用end()回到子类Builder:
public class Main { public static void main(String [] args) { CParent child = CChild .builder() .super() // 进入父类属性配置上下文 .parentId(123) // 设置父类的parentId属性 .end() // 返回子类属性配置上下文 .childId("789") // 设置子类的childId属性 .build(); CHouse house = CHouse .builder() .address("address") .description("description") .parent(child) .build(); } }
方法2:简化写法(需Lombok 1.18.20+)
如果使用Lombok 1.18.20及以上版本,@SuperBuilder支持直接在子类Builder中调用父类属性的设置方法,无需显式调用super()和end(),只需确保父类和子类都正确标记@SuperBuilder注解即可,原构建代码无需额外修改。
额外检查项
- 确保父类
CParent和子类CChild都添加了@SuperBuilder注解,这是继承Builder功能的前提。 - 不要在子类中重复定义父类已有的属性,否则会覆盖父类属性导致异常。
内容的提问来源于stack exchange,提问作者jgialis
相关产品推荐
相关产品推荐

