我有一个父类和一个子类,并且正在使用它@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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
生成器始终创建一个新实例。这是建造者模式的目的,这是建设者是如何工作的,无论你用龙目岛@SuperBuilder,@Builder或手动建设者执行。
您可以看到该builder()方法是一个static方法,因此它无权访问该实例(通常您的IDE应该在此处给您一个警告,建议您改写ListResponse.builder())。
如果您想使用一个预填充了现有实例中字段的构建器来创建新实例,则可以将其toBuilder = true用作上的注释参数@(Super)Builder。然后致电listResponse.toBuilder()。
如果要修改实例,则构建器模式不是正确的选择。请改用setter。这些可以由龙目岛以流畅,可链接的方式生成。@Accessors有关详细信息,请参见。
回答来源:Stack Overflow