web-dev-qa-db-fra.com

Lombok @Builder n'initialise pas les collections

J'utilise les annotations @Data Et @Builder De Lombok comme ceci:

@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    private final List<Actor> actors;

}

Lorsque je crée un nouveau Movie à l'aide du générateur, sans spécifier aucun acteur, je m'attends à ce que Lombok initialise ma liste en Collections.emptyList(). Mais cela ne se produit pas:

List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints 'null'.

Dans la documentation de l'annotation @Builder, Elle est indiquée aux lignes 55 et 56 dans l'exemple de code pour Vanilla Java ( https://projectlombok.org /features/Builder.html ) que je devrais regarder l'exemple de code pour @Singular ( https://projectlombok.org/features/Singular-snippet.html ). À la ligne 112 de l'exemple Vanilla Java ici, il semble que la liste devrait être initialisée à la liste vide.

J'ai vérifié, et cela arrive en effet si j'annote la liste avec @Singular:

@Data
@Builder(toBuilder = true)
class Movie {

    // Some other fields here.

    @Singular
    private final List<Actor> actors;

}

List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints '[]'.

Est-ce un bug à Lombok ou y a-t-il quelque chose que je fais mal? Selon la documentation, il semble que la liste devrait être initialisée à la liste vide dans les deux cas (car le document @Builder Fait référence au document @Singular).

25
marstran

Uniquement lorsque vous utilisez @Singular, vous obtenez une liste vide. Sur la page de documentation Builder il dit:

…avec le @Singular annotation, lombok traitera ce nœud de générateur comme une collection.

Sans le @Singular, lombok le traite comme tout autre objet. Ce sera donc null au lieu d'une collection vide.

Divulgation: je suis développeur Lombok

46
Roel Spilker