Java泛型中的协变和逆变
Java泛型中的协变和逆变
一般我们看Java泛型好像是不支持协变或逆变的,比如前面提到的List<Object>
和List<String>
之间是不可变的。但当我们在Java泛型中引入通配符这个概念的时候,Java 其实是支持协变和逆变的。
看下面几行代码:
// 不可变
List<Fruit>fruits =newArrayList<Apple>();// 编译不通过
// 协变
List<?extendsFruit>wildcardFruits =newArrayList<Apple>();
// 协变->方法的返回值,对返回类型是协变的:Fruit->Apple
Fruitfruit =wildcardFruits.get(0);
// 不可变
List<Apple>apples =newArrayList<Fruit>();// 编译不通过
// 逆变
List<?superApple>wildcardApples =newArrayList<Fruit>();
// 逆变->方法的参数,对输入类型是逆变的:Apple->Fruit
wildcardApples.add(newApple());
可见在Java泛型中通过extends
关键字可以提供协变的泛型类型转换,通过supper
可以提供逆变的泛型类型转换。
--------------------- 本文来自 OkidoGreen 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/z69183787/article/details/51598355?utm_source=copy
工欲善其事必先利其器
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略
2017-10-09 什么是分层架构模式