2015-09-28 15 views
13

sto usando di Lombok @Data e @Builder annotazioni come questo:Lombok @Builder non inizializzazione collezioni

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

    // Some other fields here. 

    private final List<Actor> actors; 

} 

Quando creo un nuovo Movie utilizzando il costruttore, senza specificare alcun attori, mi aspetterei Lombok per inizializzare la mia lista a Collections.emptyList(). Ma questo non accade:

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

Nella documentazione per il @Builder annotazione, si afferma alla linea 55 e 56 nel codice di esempio per Vanilla Java (https://projectlombok.org/features/Builder.html) che dovrei guardare l'esempio di codice per @Singular (https://projectlombok.org/features/Singular-snippet.html). Alla riga 112 nell'esempio Vanilla Java qui, sembra che l'elenco debba essere inizializzato nella lista vuota.

ho controllato, e lo fa in effetti succede se annotare la lista con @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 '[]'. 

È questo un bug in Lombok, o c'è qualcosa che sto facendo male? Secondo la documentazione, sembra che l'elenco debba essere inizializzato nella lista vuota in entrambi i casi (poiché il documento @Builder si riferisce al documento @Singular).

+0

Sto utilizzando la versione 1.16.6 di Lombok a proposito. – marstran

risposta

22

Solo quando si utilizza @Singular, si ottiene un elenco vuoto. Sul Builder documentation page si dice:

& hellip; con la @Singular annotazione, Lombok tratterà quel nodo costruttore come una collezione.

Senza il @Singular, lombok lo tratta come qualsiasi altro oggetto. Quindi sarà null invece di una raccolta vuota.

Disclosure: Sono uno sviluppatore di Lombok

+0

Grazie! A proposito, l'annotazione '@ Singular' restituisce un errore se il nome della variabile della collezione non può essere singolarizzato. Tuttavia, questo è un po 'scomodo quando si ha un nome non numerabile come nome di variabile (come la parola "equipaggiamento" o "pecora"). Perché il metodo singolare generato non può essere denominato uguale al plurale, invece di dare un errore di compilazione? – marstran

+0

La nostra breve ricerca ci fa credere che non ci siano molte di quelle parole usate nel software attuale. Ogni volta che il lombok non è sicuro, erriamo dalla parte della sicurezza. Non è un avvertimento? –

+2

Mi sono reso conto che posso solo specificare il nome come '@Singular (" equipment ")', e ha funzionato. Grazie per l'aiuto! – marstran