Java泛型T和?的区别

文章讲述了开发者在Java开发中遇到的泛型问题,特别是在接口定义和mapper层使用时的区别。T代表确定类型用于类和方法定义,?代表不确定类型用于方法调用,两者混淆导致类型不匹配的错误。解决方法是将通配符?替换为T。
摘要由CSDN通过智能技术生成

在开发过程中遇到泛型的一个坑,我定义了一个通用接口如下:

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值