2017-10-10 253 views
2

我使用lombok,假設我有兩個類。現在使用lombok訪問字段的字段

@Data 
@AllArgsConstructor 
class Book { 
    private String name; 
    private BookDetail bookDetail; 
} 

@Data 
@AllArgsConstructor 
public class BookDetail { 
    private String description; 
    private String author; 
} 

我能得到這樣一本書的作者。

Book book = new Book("name1", new BookDetail("description1", "author1")); 
System.out.println(book.getBookDetail().getAuthor()); 

這是有點多餘的,有沒有什麼辦法直接得到作者,像這樣?

Book book = new Book("name1", new BookDetail("description1", "author1")); 
System.out.println(book.getAuthor()); 
+1

爲什麼不直接用手寫呢?我的意思是在'Book'內創建'getAuthor'方法並從中調用'BookDetail#getAuthor'。 –

+0

@SergeyProkofiev是的,我可以手動做到這一點,我只是好奇龍目島是否有更好的方法來做到這一點。 – Searene

+0

我查看了他們的[功能描述](https://projectlombok.org/features/),並且沒有這樣的選項可以用純龍目島 –

回答

2

這是一個有點多餘的,有沒有辦法直接獲取筆者,這樣的嗎?

不,在龍目島絕對沒有這樣的東西。最接近的是@Singular龍目島@Builderfeature,這是相當cool,但不會幫助你,因爲它是1.對於建設者和2.僅用於集合。

我會考慮扁平你的結構。使用BookDetail會讓它變得更加複雜,我只會在別處給我提供很大的優勢時纔會這樣做。

另請注意,具有可設置的可變字段爲您提供了兩種可能性,您可以如何更改descriptiongetBookDetail().setDescription(....)setBookDetail(....)

你可能想要克隆BookDetail在getter和setter(龍目島不能爲你做)。


另一種選擇是使BookDetail@Value代替@Data),並使用@Wither代替@Setter。這使得改變description相當不方便

getBookDetail(getBookDetail().withDescription(....)); 

,但可能是值得的,有時(一般來說,不是實體,所以可能不是你的情況)。如果Lombok支持它,我會很喜歡,但它不會,也可能永遠不會(就像你想要的那樣,它需要訪問另一個類,這在運行的編譯階段是非常有問題的)。