naz*_*art 7 java list builder-pattern lombok runtimeexception
我正在使用Lombok进行我的项目.我的模型看起来像:
@Builder
@Data @AllArgsConstructor
public class ScreenDefinitionDTO {
@Singular
private List<ScreenDeclaration> screens;
}
Run Code Online (Sandbox Code Playgroud)
我想做下一步操作:
String screenName = ctx.screenName().getText();
ScreenDeclaration declaration = ParsingUtils
.buildScreenDeclaration(StringUtils.trim(screenName));
Run Code Online (Sandbox Code Playgroud)
在哪里创建实例:
public static ScreenDefinitionDTO buildEmptyScreenDTO() {
return ScreenDefinitionDTO.builder()
.screens(new ArrayList<>())
.build();
}
Run Code Online (Sandbox Code Playgroud)
最后,我得到了:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
Run Code Online (Sandbox Code Playgroud)
当我在没有Lombok构建器模式的情况下更改创建实例时,一切都很好:
public static ScreenDefinitionDTO buildEmptyScreenDTO() {
return new ScreenDefinitionDTO(new ArrayList<>());
}
Run Code Online (Sandbox Code Playgroud)
我无法理解Lombok的构建器模式有什么问题?
尝试这个:
@Builder
@Data @AllArgsConstructor
public class ScreenDefinitionDTO {
@Builder.Default
private List<ScreenDeclaration> screens = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以告诉 lombok 在构建时使用screens空的ArrayList.