Java泛型我真的悟了

说起这个泛型在刚开始学习的时候就很模糊,对于这东西看着就怕。今天花了很久的时间琢磨,先贴上一个b站up讲解的链接 Java泛型链接 讲的非常好。

通配符 ?

? 并不等同于Object 而是代表无穷的意思

如下写法是报错的,原因是 ?是大于Object类型的。 (大范围的对象约束的泛型方法,是能往里面放任何类型的子类对象,如果如下能成立必然在编译器报错。) add方法是被泛型约束的方法,不是泛型方法

在这里插入图片描述

协变 ? extends XX

协变代表:将被匹配的值转为 XX的子类,只有 XX的子类才可以匹配

  1. 为什么要使用 extends ?
    使用协变可以约束传入值的范围,确定边界。试想如果都是 ?是不是范围很大。
    使用协变的时候不能使用 XX类型里面带有泛型参数方法进行的

    在这里插入图片描述
    为什么会出现这种情况,这个时候安静想一想 ? extends Number ,就是将接收的Integer变为
    Number因为泛型边界问题 (? extends Nmber 代表 ? <=Number 取最小值 就是Number),当使用
    Number 作为对象去调用的时候,里面的add方法必然可以传入Number的所有子类"float,Integer",
    如果不加以约束,那岂不是右边的Integer里面的值都改变了.

逆变 ? super XX

逆变代表: 将?的值转为XX的父类

  1. 为什么使用 super ,可以使得接入的参数类型为XX的父类
    当取出来的时候为最大范围Object(本来应该是? 但是没用?这个类型,就使用Object)
    往里面add数据必须是最小范围(如果不是最小范围的数据,会导致左边的接收里面出现类型混杂)
    在这里插入图片描述

总结

  1. 存只能存最小范围,要保证数据一致.
  2. 取获得的是最大范围,但是可以强转.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值