Pregunta


One of my POJOs has a Boolean object field to permit NULLS in the database (a requirement). Is it possible to use the @Data Lombok annotation at class level yet override the getter for the Boolean field? The default it generates is getXXX method for the Boolean field. I wish to override it as isXXX()?

Thanks,
Paddy

¿Fue útil?

Solución

It's a bit verbose, but you can provide your own isXXX, and then use AccessLevel.NONE to tell Lombok not to generate the getXXX:

@Data
public class OneOfPaddysPojos {

    // ... other fields ...

    @Getter(AccessLevel.NONE)
    private Boolean XXX;

    public Boolean isXXX() {
        return XXX;
    }
}

(And hey, at least it's not quite as verbose as if you weren't using Lombok to begin with!)

Otros consejos

I think if you switch your field from Boolean X to boolean X than lombok generate a getter isX() method.

I know the question is old but I will leave this for future references.

You have two options to override a Getter/Setter in your class.

One is the answer from First Option response

The other option is to simply define the getter/setter method and lombok will not automatically produce the specified method.

I tested it myself and it seems to work fine:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductResponse {

    private UUID id;
    private String supplierId;
    private String sku;
    private String name;
    private String brand;
    private String imgUrl;
    private String description;
    private BigDecimal price;
    private Float quantity;
    private String unit;
    //@Getter(AccessLevel.NONE) //This means @Data will not produce a getter for this field so have to explicitly define it
    private Set<ProductTag> tags;

    //Here we override @Data getter with a different getter (return is different type)
    public List<UUID> getTags() {
    return     tags.stream().map(ProductTag::getId).collect(Collectors.toList());
    }
}

Here is also a reference from the development team comments: Lombok's developer comment

In my example I'm using the "override" feature for a Collection type but this can be used for any other type like Boolean in your case.

what is the name of boolean field? according to the lombok doc:

A default getter simply returns the field, and is named getFoo if the field is called foo (or isFoo if the field's type is boolean)

lombok will generate getter with name isXXX for your boolean field

From Lombok documentation:

You can always manually disable getter/setter generation for any field by using the special AccessLevel.NONE access level. This lets you override the behaviour of a @Getter, @Setter or @Data annotation on a class.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top