Saltar al contenido

Argumentos requeridos con Lombok @Builder

Solución:

Puede hacerlo fácilmente con la configuración de anotaciones de Lombok

import lombok.Builder;
import lombok.ToString;

@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class Person {

    private String name;
    private String surname;

    public static PersonBuilder builder(String name) {
        return hiddenBuilder().name(name);
    }
}

Y luego úsalo así

Person p = Person.builder("Name").surname("Surname").build();
System.out.println(p);

Por supuesto @ToString es opcional aquí.

No recomendaría este enfoque, ya que tendrá dificultades para aplicarlo de manera consistente en otros objetos. En su lugar, puede marcar los campos con @lombok.NonNull anotación y Lombok generará comprobaciones nulas para usted en el constructor y establecedores, de modo que Builder.build() fallará, si esos campos no están configurados.

El uso de patrones de construcción le permite tener una identificación muy clara de qué campos está configurando para qué valores. Esto ya se perdió para el campo de nombre en su ejemplo, y además se perderá para todos los demás campos obligatorios, si está creando un objeto con varios campos obligatorios. Considere el siguiente ejemplo, ¿puede saber qué campo es cuál con solo leer el código?

Person.builder("John", "Michael", 16, 1987) // which is name, which is surname? what is 16?
    .year(1982) // if this is year of birth, then what is 1987 above?
    .build()

Llevando la respuesta de Kevin Day un paso más allá:

@Builder
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE) // If immutability is desired
@ToString
public class Person {
    @NonNull // Presumably name cannot be null since its required by the builder
    private final String name;
    private final String surname;

    private static PersonBuilder builder() {
        return new PersonBuilder();
    }

    public static PersonBuilder builder(String name){
        return builder().name(name);
    }

}

No es ideal, pero proporciona cumplimiento de tiempo de compilación y los llamadores de esta clase tendrán exactamente un método de construcción para usar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *