spring 类上的Lombok @Builder与泛型

jpfvwuh4  于 2023-01-29  发布在  Spring
关注(0)|答案(1)|浏览(230)

有没有办法将Lombok的@Builder与Java泛型一起使用?

@Builder
public class Response<T> {
    private String status;
    private long total;
    private List<T> page;
}

稍后在处理来自控制器的请求的服务中:

long total = getTotalItemsCount();
List<Article> page = getPage();

Response<Article> response =
    Response.builder()
        .status("ok")
        .total(total)
        .page(page); // error on this line

无法调用page方法:
类型Response.ResponseBuilder<Object>中的方法page(List<Object>)不适用于参数(List<Article>
有什么想法吗?

nbysray5

nbysray51#

您需要指定一个“type witness”,即下面的第二个<Article>部分:

Response<Article> response =
        Response.<Article>builder() // here
            .status("ok")
            .total(total)
            .page(page)
            .build();

这其实与Lombok无关,而是Java类型推断的一个缺点,它无法通过方法调用链推断出builder()需要创建Article类型的Response,即使它最终被赋给了该类型的变量。
类型见证是重写推理和显式指定泛型类型参数的一种方法。

相关问题