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>
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:Este nuevo nombre de método constructor (
newBuilder
) te permitirá crear una nueva instancia del constructor con el métodobarList
actualizado.Luego, puedes utilizar el método constructor actualizado en tu código de la siguiente manera:
Esto creará una nueva instancia de
Foo
con el valorbarList
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.