解决Lombok父类与子类Builder不兼容

Lombok 是我们经常使用的插件,@Builder也是我们经常使用的注解,那你有没有遇见过如下错误呢?

父类与子类 Builder不兼容场景

 Error:(16, 1) java: com.jdcloud.jdsf.demo.consumer.domain.ChildModel 中的 builder() 无法隐藏 com.jdcloud.jdsf.demo.consumer.domain.ParentModel 中的 builder()
  返回类型com.jdcloud.jdsf.demo.consumer.domain.ChildModel.ChildModelBuilder与com.jdcloud.jdsf.demo.consumer.domain.ParentModel.ParentModelBuilder不兼容

父类与子类 Builder不兼容场景

解决方案

不要将子类的@builder 加载类上,单独写一个需要builder 的构造函数,加载构造函数上,并对子类builder 进行单独命名,同时使用时,也需要使用子类指定的builder。 请见如下代码:

父类使用buidler

package com.jdcloud.jdsf.demo.consumer.domain;

import lombok.*;

/**
 * 测试 Lombok, 父类
 * @author wangyushuai2@jd.com
 * @date 2020/5/24
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ParentModel {

    private String parentProp1;

}

子类使用builder

注意 单独命名 childBuilder, 使用的时候,也是用 chilerBuilder 进行构建

package com.jdcloud.jdsf.demo.consumer.domain;

import lombok.*;

/**
 * Lombok 子类
 * @author wangyushuai2@jd.com
 * @date 2020/5/24
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)// toString时,将也打印父类的属性,默认时false 的
public class ChildModel extends ParentModel {

    private String childProp1;

    @Builder(builderMethodName = "chilerBuilder")
    public ChildModel(String parentProp1, String childProp1) {
        super(parentProp1);
        this.childProp1 = childProp1;
    }
}




例子

package com.jdcloud.jdsf.demo.consumer.domain;

import lombok.extern.slf4j.Slf4j;

/**
 * lombok demo
 * @author wangyushuai2@jd.com
 * @date 2020/5/24
 */
@Slf4j
public class TestLombokServiceImpl {

    public static void main(String[] args) {

        ChildModel model = ChildModel.chilerBuilder().childProp1("child").parentProp1("parent").build();
        log.info("{}",model);
    }
}

运行结果

推荐文档

lombok 常用注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值