Lombok how to customise getter for Boolean object field?
JavaLombokJava Problem Overview
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
Java Solutions
Solution 1 - Java
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!)
Solution 2 - Java
I think if you switch your field from Boolean X
to boolean X
than lombok generate a getter isX()
method.
Solution 3 - Java
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][1]
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][2]
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.
[1]: https://stackoverflow.com/a/18139888/1970214 "First option response" [2]: https://github.com/rzwitserloot/lombok/issues/1026#issuecomment-186325559
Solution 4 - Java
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
Solution 5 - Java
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.