Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用lombok访问字段的字段_Java_Lombok - Fatal编程技术网

Java 使用lombok访问字段的字段

Java 使用lombok访问字段的字段,java,lombok,Java,Lombok,我正在使用,假设我有两个类 @Data @AllArgsConstructor class Book { private String name; private BookDetail bookDetail; } @Data @AllArgsConstructor public class BookDetail { private String description; private String author; } 现在我可以找到这样一本书的作者了 Boo

我正在使用,假设我有两个类

@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());
这有点多余,有没有办法像这样直接找到作者

Book book = new Book("name1", new BookDetail("description1", "author1"));
System.out.println(book.getAuthor());
不,在龙目山绝对没有这样的。最接近的是
@Singular
Lombok
@Builder
,它很漂亮,但对您没有帮助,因为它是1。建筑商和2。仅限收藏

我会考虑把你的结构变平。使用
BookDetail
会让事情变得更复杂,只有在其他地方给我带来巨大优势时,我才会这么做

还请注意,具有可设置的可变字段为您提供了两种可能性,即如何更改
说明
:通过
getBookDetail().setDescription(..)
或通过
setBookDetail(..)

您可能需要在getter和setter中克隆
书籍详细信息
(Lombok不能为您这样做)


另一个选项是制作
BookDetail
@Value
而不是
@Data
),并使用
@Wither
而不是
@Setter
)。这使得更改
说明
非常不方便

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

但有时可能是值得的(一般来说,不适用于实体,所以在您的情况下可能不值得)。如果Lombok支持,我会很高兴,但它不支持,而且可能永远也不会支持(正如您所希望的,它需要访问另一个类,这在它运行的编译阶段非常麻烦)。

为什么不直接手工编写呢?我的意思是在
Book
中创建
getAuthor
方法并从中调用
BookDetail\getAuthor
。@SergeyProkofiev是的,我可以手动完成,我只是好奇lombok是否有更好的方法。我已经查看了他们的文档,没有这样的选项可以用纯lombok完成