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
).
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