Lombok @Builder 未初始化集合
Lombok @Builder not initializing collections
我正在使用 Lombok 的 @Data
和 @Builder
注释,如下所示:
@Data
@Builder(toBuilder = true)
class Movie {
// Some other fields here.
private final List<Actor> actors;
}
当我使用构建器创建新的 Movie
时,没有指定任何参与者,我希望 Lombok 将我的列表初始化为 Collections.emptyList()
。但这不会发生:
List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints 'null'.
在 @Builder
注释的文档中,它在 Vanilla Java (https://projectlombok.org/features/Builder.html) that I should look at the code example for @Singular
(https://projectlombok.org/features/Singular-snippet.html) 的代码示例的第 55 行和第 56 行进行了说明。在 Vanilla Java 示例的第 112 行,似乎列表应该初始化为空列表。
我检查了一下,如果我用 @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 '[]'.
这是 Lombok 中的错误,还是我做错了什么?根据文档,在这两种情况下,列表似乎都应该初始化为空列表(因为 @Builder
文档引用 @Singular
文档)。
仅当您使用 @Singular
时,您会得到一个空列表。在 Builder documentation page 上面写着:
…with the @Singular
annotation, lombok will treat that builder node as a collection.
没有 @Singular
,lombok 将其视为任何其他对象。所以它将是 null
而不是一个空的集合。
披露:我是 Lombok 开发人员
从Lombok v1.16.16开始,你可以默认使用@Builder的内部注解来初始化你的集合。例如:
@Data
@Builder
class Movie {
@Builder.Default
private final List<Actor> actors = new ArrayList<>();
}
因此,当您使用构建器创建新电影而不指定任何演员时:
Movie movie = Movie.builder().build();
movie.getActors(); // Will return instance of ArrayList
我正在使用 Lombok 的 @Data
和 @Builder
注释,如下所示:
@Data
@Builder(toBuilder = true)
class Movie {
// Some other fields here.
private final List<Actor> actors;
}
当我使用构建器创建新的 Movie
时,没有指定任何参与者,我希望 Lombok 将我的列表初始化为 Collections.emptyList()
。但这不会发生:
List<Actor> actors = Movie.builder().build().getActors();
System.out.println(actors); // Prints 'null'.
在 @Builder
注释的文档中,它在 Vanilla Java (https://projectlombok.org/features/Builder.html) that I should look at the code example for @Singular
(https://projectlombok.org/features/Singular-snippet.html) 的代码示例的第 55 行和第 56 行进行了说明。在 Vanilla Java 示例的第 112 行,似乎列表应该初始化为空列表。
我检查了一下,如果我用 @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 '[]'.
这是 Lombok 中的错误,还是我做错了什么?根据文档,在这两种情况下,列表似乎都应该初始化为空列表(因为 @Builder
文档引用 @Singular
文档)。
仅当您使用 @Singular
时,您会得到一个空列表。在 Builder documentation page 上面写着:
…with the
@Singular
annotation, lombok will treat that builder node as a collection.
没有 @Singular
,lombok 将其视为任何其他对象。所以它将是 null
而不是一个空的集合。
披露:我是 Lombok 开发人员
从Lombok v1.16.16开始,你可以默认使用@Builder的内部注解来初始化你的集合。例如:
@Data
@Builder
class Movie {
@Builder.Default
private final List<Actor> actors = new ArrayList<>();
}
因此,当您使用构建器创建新电影而不指定任何演员时:
Movie movie = Movie.builder().build();
movie.getActors(); // Will return instance of ArrayList