【问题标题】:Lombok @SuperBuilder is not initializing my class objectsLombok @SuperBuilder 没有初始化我的类对象
【发布时间】:2023-04-08 02:42:01
【问题描述】:

我有一个父类和一个子类,我正在使用@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;
}

其中 ItemSerializable 类。

最初ListResponse

itemList = null
itemCount = 0
responseMessage = null

当我尝试使用 builder 构建 ListResponse 时,它根本不会更改 ListResponse 对象。我正在尝试构建为

//listResponse is @Autowired from Spring and is initially as shown above. 
List<Item> 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 的其他参考资料,但没有得到任何结果。有人可以指出这里出了什么问题吗?

【问题讨论】:

  • @altarbza 谢谢,但你能先帮忙解决一下手头的问题吗?

标签: java spring lombok intellij-lombok-plugin


【解决方案1】:

构建器总是创建一个新实例。这是构建器模式的目的,也是构建器的工作方式,无论您使用 Lombok 的 @SuperBuilder@Builder 还是手动构建器实现。

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

如果您想使用预填充现有实例中的字段的构建器创建新实例,您可以使用toBuilder = true 作为@(Super)Builder 上的注释参数。然后拨打listResponse.toBuilder()

如果要修改实例,构建器模式不是正确的选择。改用二传手。 Lombok 也可以以流畅、可链接的方式生成这些内容;详情请见@Accessors

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多