You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用带界泛型创建接口实现类对象时遇类型不匹配错误求助

泛型类型不匹配问题原因及解决

我尝试使用带界泛型创建实现ScannableEntity接口的Attachment子类的泛型对象,但初始化时遇到类型不匹配错误。

接口定义

public interface ScannableEntity {
}

实现类

public final class Attachment implements ScannableEntity {
    // 类实现代码
}

带界泛型类定义

@Builder
public class SegmentPageScanResult<TEntity extends ScannableEntity> {
    // 类成员及方法
}
public class ItemProcessor<TEntity extends ScannableEntity> {
    void submitAndExecute(SegmentPageScanResult<TEntity> pageScanResult) {
        // 方法实现
    }
}

单元测试代码

@ExtendWith(MockitoExtension.class)
public class ScanTest {

    @Mock
    private ItemProcessor<Attachment> itemProcessor;

    @Test
    public void testDoScan() {
        Attachment mockRecord = new Attachment();
        SegmentPageScanResult<Attachment> segmentPageScanResult = SegmentPageScanResult.builder()
            .scannedItems(ImmutableList.of(mockRecord))
            .isLastPage(true)
            .build();      
        verify(itemProcessor).submitAndExecute(segmentPageScanResult);
    }
}

错误信息

Required type: SegmentPageScanResult<Attachment>
Provided:SegmentPageScanResult<ScannableEntity>

问题原因

核心问题出在Lombok的@Builder注解上:当调用SegmentPageScanResult.builder()时,编译器无法自动推断出目标泛型类型是Attachment,会默认使用泛型的上界ScannableEntity来创建builder实例,最终build出的对象类型为SegmentPageScanResult<ScannableEntity>。

Java泛型属于静态类型检查,SegmentPageScanResult<Attachment>和SegmentPageScanResult<ScannableEntity>是不同的参数化类型——即便Attachment实现了ScannableEntity,两者也不能直接赋值(泛型默认是不可变的,除非使用通配符? extends ScannableEntity,但此处方法参数要求精确匹配类型)。

解决方法

有两种简单的修复方式:

  1. 显式指定泛型类型:调用builder时明确声明泛型参数,让编译器确定目标类型:
SegmentPageScanResult<Attachment> segmentPageScanResult = SegmentPageScanResult.<Attachment>builder()
    .scannedItems(ImmutableList.of(mockRecord))
    .isLastPage(true)
    .build();
  1. 借助参数辅助类型推断:如果SegmentPageScanResult存在接收TEntity类型的属性或方法,可先设置该属性,让编译器通过参数类型自动推断泛型(该方式依赖类结构,显式指定更直接可靠)。

内容的提问来源于stack exchange,提问作者Megha Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:01:24