2015-09-28 14 views
13

: Ben herhangi bir aktörleri belirtmeden, oluşturucu kullanarak yeni Movie oluşturduğunuzda, ben Lombok benim listesi başlatmak için beklenebilirLombok @Builder başlatılıyor değil koleksiyonları

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

    // Some other fields here. 

    private final List<Actor> actors; 

} 

Collections.emptyList(). Ama bu olmazsa:

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

@Builder açıklama belgelerinde, bu ben @Singular için kod örneği bakmak gerekir Vanilya Java (https://projectlombok.org/features/Builder.html) için kod örneğinde hat 55 ve 56 üzerinden değerlendirilir (https://projectlombok.org/features/Singular-snippet.html). Burada Vanilla Java örneğindeki 112 satırında, listenin boş listeye başlatılması gerektiği anlaşılıyor.

ben kontrol ettim @Singular ile liste açıklama eğer gerçekten meydana geliyor:

@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 '[]'. 

bu Lombok bir hata mı, yoksa yanlış yapıyorum şey mi var? Belgelere göre, liste her iki durumda da boş listeye başlatılmış gibi görünüyor (çünkü @Builder belgesi @Singular belgesine başvuruyor).

+0

Bu arada Lombok sürüm 1.16.6 kullanıyorum. – marstran

cevap

22

Sadece @Singular'u kullandığınızda boş bir liste alırsınız. Builder documentation page günü şöyle der:

& hellip; @Singular ek açıklamasıyla, lombok topluluğu olarak bu oluşturucu düğümünü ele alacağız.

@Singular olmadan, lombok başka herhangi bir nesne olarak davranır. Bu yüzden boş bir Koleksiyon yerine null olacaktır.

Bildirim: Ben bir Lombok geliştiricisiyim

+0

Teşekkürler! Bu arada, koleksiyonun değişken adı tekilleştirilemezse, 'Singular' ek açıklaması bir hata verir. Ancak, değişken ad olarak ("ekipman" kelimesi veya "koyun" gibi) isimsiz bir isim kullandığınız zaman bu biraz rahatsız edici olur. Neden oluşturulan tekilleştirme yöntemi bir derleme hatası vermek yerine çoğul olanla aynı olamaz? – marstran

+0

Kısa araştırmamız, gerçek yazılımlarda kullanılan kelimelerin çoğunun bulunmadığına inanmamızı sağladı. Ne zaman lombok emin değilse, güvenli tarafta hata yaparız. Bu bir uyarı değil mi? –

+2

Bu tür @Singular ("ekipman") 'gibi bir isim belirleyebileceğimi fark ettim ve işe yaradı. Yardım ettiğin için teşekkür ederim! – marstran