开发者社区> 问答> 正文

Lombok @SuperBuilder未初始化我的类对象

我有一个父类和一个子类,并且正在使用它@SuperBuilder来构建子对象,但是看来它根本没有初始化。我的家长班看起来像这样:

@Getter
@Setter
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@SuperBuilder
public class MessageResponse {
    String responseMessage;
}

我的孩子班级看起来像这样:

@Getter
@Setter
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@SuperBuilder
public class ListResponse extends MessageResponse {
    List<Item> itemList;
    int itemCount;
}```
其中Item是一个Serializable类。

最初ListResponse是

itemList = null itemCount = 0 responseMessage = null 当我尝试ListResponse使用生成器进行构建时,它根本不会更改ListResponse对象。我正在尝试建立

//listResponse is @Autowired from Spring and is initially as shown above. List itemList = getItems(); // It returns a list of 15 items, i have checked in debugger, It does. listResponse.builder() .bucketList(itemList) .responseMessage("Item List.") .bucketCount(itemList.size()) .build();``` 即使执行.build()完此listResponse对象的内容后仍然(null, 0 , null)。

我尝试搜索有关的其他参考@SuperBuilder,@Builder但没有结果。有人可以指出这里出了什么问题吗?

问题来源:Stack Overflow

展开
收起
montos 2020-03-27 22:24:51 3047 0
1 条回答
写回答
取消 提交回答
  • 生成器始终创建一个新实例。这是建造者模式的目的,这是建设者是如何工作的,无论你用龙目岛@SuperBuilder,@Builder或手动建设者执行。

    您可以看到该builder()方法是一个static方法,因此它无权访问该实例(通常您的IDE应该在此处给您一个警告,建议您改写ListResponse.builder())。

    如果您想使用一个预填充了现有实例中字段的构建器来创建新实例,则可以将其toBuilder = true用作上的注释参数@(Super)Builder。然后致电listResponse.toBuilder()。

    如果要修改实例,则构建器模式不是正确的选择。请改用setter。这些可以由龙目岛以流畅,可链接的方式生成。@Accessors有关详细信息,请参见。

    回答来源:Stack Overflow

    2020-03-27 22:25:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载