java - 如何在@SuperBuilder 上使用 Lombok 的 toBuilder

标签 java builder lombok

目前我有这三个类:

@Value
@NonFinal
@SuperBuilder
public class Parent {
    // Some fields
}

@Value
@EqualsAndHashCode(callSuper = true)
@SuperBuilder(toBuilder = true)
public class ChildA extends Parent {
    // Some fields
}

@Value
@EqualsAndHashCode(callSuper = true)
@SuperBuilder(toBuilder = true)
public class ChildB extends Parent {
    // Some fields
}

我想按如下方式在映射器中使用它以避免重复任何代码:

private ChildA buildChildA(Entity entity) {
    Parent parent = ((ChildB) buildParent(entity, ChildA.builder().build()))
        .toBuilder()
        // Populate Child A fields from entity
        .build();
}

private ChildB buildChildB(Entity entity) {
    Parent parent = ((ChildA) buildParent(entity, ChildA.builder().build()))
        .toBuilder()
        // Populate Child B fields from entity
        .build();
}

private Parent buildParent(Partner entity, Parent parent) {
    return parent.toBuilder()
        // Populate Parent fields here
        .build();
}

然而,当我尝试编译时,我得到:

ChildA.java:13: error: method does not override or implement a method from a supertype 
@SuperBuilder(toBuilder = true) 
^ 
ChildB.java:13: error: method does not override or implement a method from a supertype 
@SuperBuilder(toBuilder = true) 
^ 
2 errors

如何将 toBuilder 与 @SuperBuilder 一起使用?我正在使用 lombok v1.18.4。

最佳答案

如果要将@SuperBuildertoBuilder 一起使用,层次结构中的所有类都必须具有toBuilder=true。原因是 toBuilder() 方法仅从其各自的类中复制字段值,但将字段值从父类(super class)型复制到父类(super class)型的 toBuilder() 方法。

所以只需将 toBuilder=true 添加到您的 Parent 类即可。

关于java - 如何在@SuperBuilder 上使用 Lombok 的 toBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54197544/

相关文章:

java - 打印数组列表中的内容

java - 无法在错误的本地 POM 中找到到请求目标的有效证书路径和 'parent.relativePath' 点

ruby-on-rails - 在任何源中都找不到 builder-2.1.2

mysql - 在 Eloquent 模型中使用条件 where 子句构建查询

java - Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON

java - Eclipse JUnit4 和 gradle 测试运行之间 @EqualsAndHashCode 的行为不一致

java - Java 容器中的多种类型的对象

java - 为什么 Spring @Qualifier 不适用于 Spock 和 Spring Boot

ruby-on-rails - Rails 3/ cucumber 问题: "...already activated builder 3.0.0, but your Gemfile requires builder 2.1.2"

maven - lombok 和 maven-lombok-plugin 之间的区别