Cómo crear un constructor para un POJO de terceros.
¿Cómo puedo crear un constructor de Lombok para una clase de un tercero (es decir, no puedo modificar su código fuente)?
Tengo una clase existente que no puedo cambiar:
public class ThirdPartyPojo {
// una de las muchas propiedades
private String name;
public ThirdPartyPojo() {
// constructor predeterminado sin argumentos
}
String getName() {
return this.name;
}
void setName(String name) {
this.name = name;
}
// muchos más getters y setters
}
Ahora me gustaría crear un @Builder
para obtener una API de constructor fluida que simplifique la instanciación de ThirdPartyPojo
con valores predeterminados.
Esto es lo que intenté:
@Builder
public class ThirdPartyPojoBuilder extends ThirdPartyPojo {
@Default
private String name = "nombre predeterminado";
// muchos más valores predeterminados para otras propiedades
}
El código se compila y puedo hacer referencia al constructor, por ejemplo:
ThirdPartyPojo pojoConNombrePredeterminado = ThirdPartyPojoBuilder.builder().build();
ThirdPartyPojo pojoConNombrePersonalizado = ThirdPartyPojoBuilder.builder().name("nombre personalizado").build();
System.out.println(pojoConNombrePredeterminado.getName());
System.out.println(pojoConNombrePersonalizado.getName());
Sin embargo, esto no funciona ya que getName()
devuelve null
tanto para pojoConNombrePredeterminado
como para pojoConNombrePersonalizado
.
davy.ai
Desafortunadamente, no es posible crear un generador de Lombok para una clase de terceros sin modificar su código fuente. Lombok funciona generando código en tiempo de compilación y, para hacerlo, necesita acceso al código fuente de la clase que se está construyendo.
Tendrías que crear una clase envolvente alrededor de la clase
ThirdPartyPojo
que contenga la anotación@Builder
y delegue a la claseThirdPartyPojo
original, de la siguiente manera:Ten en cuenta que este enfoque crea una capa adicional de objetos entre tu código y la biblioteca de terceros, por lo que debes considerar si esta es una opción viable para tu caso de uso.