Superbuilder

@SuperBuilder

La anotación @SuperBuilder de Lombok es una versión mejorada de @Builder, pensada para clases que heredan de otras clases. Permite construir objetos de manera fluida y sencilla, incluso cuando las propiedades están en superclases.

❗📌 Requiere que todas las superclases usen también @SuperBuilder.

¿Cuándo usarlo?

  • Cuando tienes clases que heredan de otras y quieres usar el patrón builder.
  • Cuando quieres una forma clara y flexible de construir objetos complejos.

Ejemplo básico

import lombok.experimental.SuperBuilder;

@SuperBuilder
class Persona {
    String nombre;
    String ciudad;
}

@SuperBuilder
class Empleado extends Persona {
    String trabajo;
}

Uso:

Empleado empleado = Empleado.builder()
    .nombre("Adam Savage")
    .ciudad("San Francisco")
    .trabajo("Mythbusters")
    .build();

🔧 Personalización

toBuilder = true

Si agregas toBuilder = true, puedes crear un nuevo builder a partir de una instancia existente.

@SuperBuilder(toBuilder = true)
class Persona {
    String nombre;
    String ciudad;
}
Persona p1 = Persona.builder()
    .nombre("Laura")
    .ciudad("Madrid")
    .build();

Persona p2 = p1.toBuilder()
    .ciudad("Barcelona")
    .build();

Personalización de métodos

@SuperBuilder(
    buildMethodName = "ejecutar", 
    builderMethodName = "crear", 
    toBuilder = true, 
    setterPrefix = "con"
)
class Persona {
    String nombre;
}
Persona persona = Persona.crear()
    .conNombre("Carlos")
    .ejecutar();

Uso con colecciones: @Singular

@Singular