es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Anular constructor de Lombok y cambiar el tipo de valor.

Tengo la siguiente clase con Lombok @Builder donde anulo un método del constructor para convertir la lista de cadenas de entrada en una lista de enums (campo barList):

(Aún uso el método predeterminado para el otro campo number)

import java.util.List;
import java.util.stream.Collectors;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder(toBuilder = true)
public class Foo {
    private List<barenum> barList;
    private int number;

    public static class FooBuilder {
        private List<barenum> barList;

        public FooBuilder barList(List<string> barStringList) {
            this.barList = barStringList.stream()
                                        .map(barString -> BarEnum.valueOf(barString))
                                        .collect(Collectors.toList());
            return this;
        }
    }
}

Al compilar, obtengo este error en la línea @Builder(toBuilder = true) anterior:

tipos incompatibles: java.util.List<com.mypackage.barenum> no se puede convertir a java.util.List<java.lang.string>

No pude encontrar ninguna respuesta donde pueda anular el método del constructor predeterminado y cambiar el tipo de valor. ¿Es posible hacer esto?</java.lang.string></com.mypackage.barenum>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible anular el método constructor predeterminado en Lombok y cambiar el tipo de valor. En este caso, debes especificar explícitamente el tipo genérico del método builder(). Para solucionar el error, puedes actualizar la anotación del constructor de la siguiente manera:

    @Builder(toBuilder = true, builderMethodName = "newBuilder")
    

    Este nuevo nombre de método constructor (newBuilder) te permitirá crear una nueva instancia del constructor con el método barList actualizado.

    Luego, puedes utilizar el método constructor actualizado en tu código de la siguiente manera:

    Foo newFoo = foo.newBuilder().barList(Arrays.asList("BAR1", "BAR2")).build();
    

    Esto creará una nueva instancia de Foo con el valor barList actualizado.

    Ten en cuenta que necesitas modificar el nombre del método constructor porque Lombok genera un método constructor con el mismo nombre que la clase. Al especificar un nombre de método constructor personalizado, puedes evitar conflictos con el método constructor predeterminado.

Comments are closed.