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 @SuperBuilder
con toBuilder
todas 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=true
a su Parent
clase, también.