如何在带泛型的Java类中使用Lombok的@Builder注解?
问题原因与解决办法
问题根源
调用Response.builder()时,编译器没法自动推断出泛型T的具体类型,默认把它识别成Object,导致生成的ResponseBuilder<Object>的page方法只能接受List<Object>参数,和你传入的List<Article>类型不匹配,所以报错。
解决办法
方法一:显式指定泛型类型调用builder
在调用builder()时,明确标注泛型T为Article,让生成的Builder能正确识别page参数的类型:
long total = getTotalItemsCount(); List<Article> page = getPage(); Response<Article> response = Response.<Article>builder() // 显式指定泛型 .status("ok") .total(total) .page(page); // 不再报错
方法二:通过变量类型推断间接指定
先把Builder实例赋值给带有明确泛型的变量,让编译器自动识别类型:
long total = getTotalItemsCount(); List<Article> page = getPage(); Response.ResponseBuilder<Article> builder = Response.builder(); Response<Article> response = builder .status("ok") .total(total) .page(page);
方法三:升级Lombok版本(可选)
如果你用的是较旧版本的Lombok,可能存在泛型推断不完善的问题。升级到最新稳定版后,部分场景下编译器能自动识别泛型类型,但显式指定泛型的方法依然是最稳妥的方案。
内容的提问来源于stack exchange,提问作者user1034461
相关产品推荐
相关产品推荐

