在开发过程中遇到泛型的一个坑,我定义了一个通用接口如下:
IPage<?> selectAssociationByIndId(IPage<?> page, Long indId);
写到mapper层的时候会报错
Required type:List<capture of ?>
Provided:List<capture of ?>
咦?心里想这要求的类型和提供的类型不是一样的嘛
后来去翻阅各位大佬的帖子之后才搞懂?通配符,之前以为自己懂了?,其实并不懂,
T 是一个 确定的 类型,通常用于泛型类和泛型方法的定义,?是一个 不确定 的类型,通常用于泛型方法的调用代码和形参,不能用于定义类和泛型方法。T在实例化的时候会用具体类型来替代,而?不会。
而我的报错就是在泛型中,类型参数的通配符捕获会导致类型不匹配的问题。
替换?为T就好了:
IPage<T> selectAssociationByIndId(IPage<T> page, Long indId);