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

如何用Mockito BDD模拟返回类型为Class<?>的方法?

解决Mockito BDD模拟Class<?>返回值的编译错误

问题原因

目标方法返回类型为Class<?>,而Comparable.class的实际类型是Class<Comparable>,Java泛型的类型推断机制无法自动适配Mockito BDD的willReturn方法,导致编译时出现Cannot resolve method 'willReturn(Class<Comparable>)'错误。

解决方案

以下几种方法都可以解决该问题:

  • 强制类型转换
    将返回值强制转换为Class<?>,让编译器明确匹配目标类型:

    given(serviceFactoryBean.getInterfaceClass()).willReturn((Class<?>) Comparable.class);
    
  • 显式指定泛型参数
    调用willReturn时显式声明泛型类型,消除类型推断歧义:

    given(serviceFactoryBean.getInterfaceClass()).<Class<?>>willReturn(Comparable.class);
    
  • 使用类型转换工具方法
    借助Class.cast()方法完成类型适配:

    given(serviceFactoryBean.getInterfaceClass()).willReturn(Class.class.cast(Comparable.class));
    

可选替代方案

如果不局限于BDD风格,使用Mockito标准的when-thenReturn写法也能自动适配类型:

when(serviceFactoryBean.getInterfaceClass()).thenReturn(Comparable.class);

内容的提问来源于stack exchange,提问作者Jackie Sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:13