欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > java泛型的协变、逆变和不变

java泛型的协变、逆变和不变

2025/9/25 14:32:48 来源:https://blog.csdn.net/wulong756273/article/details/146509164  浏览:    关键词:java泛型的协变、逆变和不变

引言

我们在看开源框架经常会看到泛型来定义数据类型。

有时候, <? extends T>  和 <? super T>  这样带通配符的泛型参数。

这种通配符的泛型是什么意思怎么用????

概念

  型变: 用来描述类型转换后的继承关系。(即协变,逆变和不变的总称)

协变: 满足 条件 : 例子   list<orange> 是  list<? extends Fruits> 的子类型时,称为协变。

逆变: 满足条件 : 例子 List<fruits> 是  List <? super Orange > 的子类型时,称之为逆变。

带通配符的泛型是什么意思?

这是因为java 泛型本身不支持型变,因此引入通配符来解决泛型类型转换问题。

通用表达式:

C <? extends T> 表示类型转换的上界。

C<? super T >. 表示类型转换的下界。

上界和下界的理解?

在java中泛型加入了extends 关键字 实现了支持协变。<? extends T >  其中?代表不确定的类型的通配符, 和extends 结合就声明了泛型的上限  表示 接收类型是 T或者 T的子类

使用 super 关键字,实现了支持逆变 。声明泛型下界 , <? super T >    逆变后就可以接收本类型或父类型的泛型类。   

如果直接指定 T会有什么问题?

直接使用 T 不会有问题,但会限制函数接口的灵活性导致框架的通用性降低。

目的

型变的最终目的是保证运行安全的基础上提高了参数类型的灵活性。

应用场景

只读不写: 用协变

只写不读: 用逆变

又读又写: 用不变。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词