with some getters generate example data annotation java builder lombok

some - lombok java constructor example



¿Cómo excluir la propiedad del constructor Lombok? (4)

Alternativamente, descubrí que marcar un campo como final , estático o final estático le @Builder a @Builder que ignore este campo.

@Builder public class MyClass { private String myField; private final String excludeThisField = "bar"; }

Lombok 1.16.10

Tengo una clase llamada como "XYZClientWrapper", que tiene la siguiente estructura:

@Builder XYZClientWrapper{ String name; String domain; XYZClient client; }

No quiero que se genere una función de compilación para la propiedad XYZClient client

¿Lombok apoya tal caso de uso?


Cree el generador en código y agregue un setter privado para su propiedad.

@Builder XYZClientWrapper{ String name; String domain; XYZClient client; public static class XYZClientWrapperBuilder { private XYZClientWrapperBuilder client(XYZClient client) { return this; } } }


Descubrí que pude implementar un "shell" de la clase de Generador estático, agregar el método que quiero ocultar con un modificador de acceso privado y ya no se puede acceder al mismo en el constructor. Del mismo modo, también puedo agregar métodos personalizados al constructor.

package com.something; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import java.time.ZonedDateTime; @Data @Entity @Builder @AllArgsConstructor @NoArgsConstructor public class MyClass{ //The builder will generate a method for this property for us. private String anotherProperty; @Embedded @AttributeOverrides({ @AttributeOverride(name = "localDateTime", column = @Column(name = "some_date_local_date_time")), @AttributeOverride(name = "zoneId", column = @Column(name = "some__date_zone_id")) }) @Getter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE) private ZonedDateTimeEmbeddable someDateInternal; public ZonedDateTime getSomeDate() { return someDateInternal.toZonedDateTime(); } public void setSomeDate(ZonedDateTime someDate) { someDateInternal = new ZonedDateTimeEmbeddable(someDate); } public static class MyClassBuilder { //Prevent direct access to the internal private field by pre-creating builder method with private access. private MyClassBuilder shipmentDateInternal(ZonedDateTimeEmbeddable zonedDateTimeEmbeddable) { return this; } //Add a builder method because we don''t have a field for this Type public MyClassBuilder someDate(ZonedDateTime someDate) { someDateInternal = new ZonedDateTimeEmbeddable(someDate); return this; } } }


Sí, puede colocar @Builder en un método constructor o estático (de fábrica), que contiene solo los campos que desea.

Divulgación: Soy un desarrollador de Lombok.