Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

333
Vistas
¿Cómo crear un constructor para POJO de terceros?

¿Cómo puedo crear un constructor de Lombok para una clase de terceros (es decir, no puedo modificar su código fuente)?

Tengo una clase existente que no puedo cambiar:

 public class ThirdPartyPojo { // one of many properties private String name; public ThirdPartyPojo() { // default no-args constructor } String getName() { return this.name; } void setName(String name) { this.name = name; } // many more getters and setters }

Ahora me gustaría crear un @Builder para obtener una API de compilación fluida para simplificar la creación de instancias de ThirdPartyPojo con valores predeterminados.

Esto es lo que probé:

 @Builder public class ThirdPartyPojoBuilder extends ThirdPartyPojo { @Default private String name = "default name"; // many more default values for other properties }

El código se compila y puedo hacer referencia al constructor, por ejemplo

 ThirdPartyPojo pojoWithDefaultName = ThirdPartyPojoBuilder.builder().build(); ThirdPartyPojo pojoWithCustomName = ThirdPartyPojoBuilder.builder().name("custom name").build(); System.out.println(pojoWithDefaultName.getName()); System.out.println(pojoWithCustomName.getName());

Sin embargo, esto no funciona ya que getName() devuelve un null tanto para pojoWithDefaultName como para pojoWithCustomName .

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Me temo que no hay una salida fácil para que Lombok genere automáticamente el constructor de la forma que desee. Lo que hace Lombok @Builder en general es:

Finalmente, aplicar @Builder a una clase es como si agregara @AllArgsConstructor(access = AccessLevel.PACKAGE) a la clase y aplicara la anotación @Builder a este constructor de todos los argumentos.

Eso es, creo, todo lo que puedes hacer:

 public class ThirdPartyPojoBuilder extends ThirdPartyPojo { @Builder public ThirdPartyPojoBuilder(String name) { this.setName(name); } }

Entonces es posible, por ejemplo:

 var thirdPartyPojo = ThirdPartyPojoBuilder.builder().name("A Name").build();
over 4 years ago · Santiago Trujillo Denunciar

0

Según la respuesta de pirho , encontré una solución factible que también respeta los valores predeterminados.

  1. Ampliar la clase de terceros
  2. Agregue la anotación @Builder en el nivel de clase
  3. Agregue cualquier campo que deba ser configurable por el constructor
  4. Agregue @Default y asigne valores a cualquier campo que deba tener un valor predeterminado
  5. Agregue un constructor con todos los parámetros que coincidan con todos los campos
  6. Agregue this.set*(...) para cada parámetro del constructor

p.ej

 @Builder public class ThirdPartyPojoBuilder extends ThirdPartyPojo { @Default private String name = "default name" public ThirdPartyPojoBuilder(String name) { this.setName(name); } }

que también admite valores predeterminados:

 ThirdPartyPojo pojoWithDefaultName = ThirdPartyPojoBuilder.builder().build(); ThirdPartyPojo pojoWithCustomName = ThirdPartyPojoBuilder.builder().name("custom name").build(); System.out.println(pojoWithDefaultName.getName()); // prints "default name" System.out.println(pojoWithCustomName.getName()); // prints "custom name"
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda