Lombok comment personnaliser getter pour Boolean object field?



Un de mes POJOs a un champ objet booléen pour permettre 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 outrepassant le getter pour le champ booléen? La méthode par défaut qu'il génère est la méthode getXXX pour le champ booléen. Je souhaite le remplacer comme isXXX()?

Merci,

Paddy

26
demandé sur Paddy 2013-08-09 07:33:48

4 réponses

C'est un peu verbeux, mais vous pouvez fournir votre propre isXXX, et ensuite 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 il n'est pas tout à fait aussi verbeux que si vous n'utilisiez pas Lombok pour commencer!)

42
répondu ruakh 2013-08-09 04:07:35

je pense que si vous passez votre champ d' Boolean Xboolean X que lombok génère un getter isX() méthode.

12
répondu kate 2016-03-18 14:36:44

quel est le nom de champ booléen? selon l' lombok doc:

un getter par défaut renvoie simplement le champ, et s'appelle getFoo si le le champ est appelé foo (ou isFoo si le type du champ est booléen)

lombok générera getter avec le nom isXXX pour votre champ booléen

0
répondu Septem 2013-08-09 03:54:29

je sais que la question Est ancienne mais je vais laisser ceci pour des références futures.

vous avez deux options pour outrepasser un Getter/Setter dans votre classe.

On est la réponse de Première réponse à l'Option

l'autre option est de 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 il 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 aussi une référence de l'équipe de développement de commentaires: Commentaire du développeur de Lombok

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

0
répondu Rafael R. S. Robles 2018-05-02 08:41:56