Cómo utilizar toBuilder de Lombok en @SuperBuilder

kentsurrey:

En este momento tengo estas tres clases:

@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
}

Quiero usarlo en un asignador de la siguiente manera para evitar la duplicación de cualquier código:

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();
}

Sin embargo, cuando intento compilar me sale:

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

¿Cómo se utiliza toBuilder con @SuperBuilder? Estoy usando v1.18.4 Lombok.

Ene Rieke:

Si desea utilizar @SuperBuildercon toBuildertodas las clases de la jerarquía deben tener toBuilder=true. La razón es que el toBuilder()método sólo copia los valores de campo de su respectiva clase, pero delega la copia de los valores de los campos de los supertipos a los supertipos toBuilder()métodos.

Así que sólo tiene que añadir toBuilder=truea su Parentclase, también.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180780&siteId=1
Recomendado
Clasificación