web-dev-qa-db-fra.com

Lombok comment personnaliser getter pour le champ objet booléen?


Un de mes POJO a un champ objet booléen pour autoriser les NULLS dans la base de données (une exigence). Est-il possible d'utiliser l'annotation @Data Lombok au niveau de la classe tout en remplaçant le getter pour le champ booléen? La valeur par défaut qu'elle génère est la méthode getXXX pour le champ booléen. Je souhaite le remplacer par isXXX ()?

Merci,
Paddy

36
Paddy

C'est un peu bavard, mais vous pouvez fournir votre propre isXXX, puis utiliser AccessLevel.NONE pour dire à Lombok de ne pas générer le getXXX:

@Data
public class OneOfPaddysPojos {

    // ... other fields ...

    @Getter(AccessLevel.NONE)
    private Boolean XXX;

    public Boolean isXXX() {
        return XXX;
    }
}

(Et bon, au moins ce n'est pas tout à fait aussi verbeux que si vous n'utilisiez pas Lombok pour commencer!)

58
ruakh

Je pense que si vous changez votre champ de Boolean X En boolean X Que lombok génère une méthode getter isX().

13
kate

Je sais que la question est ancienne mais je vais laisser cela pour de futures références.

Vous avez deux options pour remplacer un Getter/Setter dans votre classe.

L'un est la réponse de réponse de la première option

L'autre option consiste à simplement définir la méthode getter/setter et lombok ne produira pas automatiquement la méthode spécifiée.

Je l'ai testé moi-même et cela semble bien fonctionner:

@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());
    }
}

Voici également une référence des commentaires de l'équipe de développement: Commentaire du développeur de Lombok

Dans mon exemple, j'utilise la fonction "override" pour un type Collection mais cela peut être utilisé pour tout autre type comme Boolean dans votre cas.

1

quel est le nom du champ booléen? selon le doc lombok :

Un getter par défaut renvoie simplement le champ et est nommé getFoo si le champ est appelé foo (ou isFoo si le type du champ est booléen)

lombok va générer un getter avec le nom isXXX pour votre champ booléen

1
Septem