我使用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());
答案 0 :(得分:2)
这有点多余,有没有办法直接找到作者,像这样?
不,龙目岛肯定没有这样的。最接近的是@Singular
龙目岛@Builder
feature,它非常cool,但不会帮助您,因为它是1.建造者和2.仅限收藏。
我考虑将你的结构弄平。使用BookDetail
会让事情变得更加复杂,只有当它在其他地方为我提供了很大的优势时,我才会这样做。
另请注意,拥有可设置的可变字段可为您提供两种可能性,即如何更改description
:getBookDetail().setDescription(....)
或setBookDetail(....)
。
您可能希望克隆getter和setter中的BookDetail
(Lombok无法为您执行此操作)。
另一种选择是制作BookDetail
(@Value
而不是@Data
)并使用@Wither
代替@Setter
。这使得更改description
非常不方便
getBookDetail(getBookDetail().withDescription(....));
但有时可能是值得的(一般情况下,不是实体,所以可能不适合你)。如果龙目岛支持这一点,我会喜欢它,但它不会,也可能永远不会(就像你想要的那样,它需要访问另一个类,这在它运行的编译阶段是非常有问题的。) / p>