Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

336
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda