栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java泛型我真的悟了

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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. 取获得的是最大范围,但是可以强转.
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/852100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号