码迷,mamicode.com
首页 > 编程语言 > 详细

Java泛型中的协变和逆变

时间:2018-10-09 15:02:14      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:article   net   ret   地址   cti   方法   类型转换   dog   代码   

Java泛型中的协变和逆变

一般我们看Java泛型好像是不支持协变或逆变的,比如前面提到的List<Object>List<String>之间是不可变的。但当我们在Java泛型中引入通配符这个概念的时候,Java 其实是支持协变和逆变的。

看下面几行代码:

 

  1. // 不可变
  2. List<Fruit>fruits =newArrayList<Apple>();// 编译不通过
  3. // 协变
  4. List<?extendsFruit>wildcardFruits =newArrayList<Apple>();
  5. // 协变->方法的返回值,对返回类型是协变的:Fruit->Apple
  6. Fruitfruit =wildcardFruits.get(0);
  7. // 不可变
  8. List<Apple>apples =newArrayList<Fruit>();// 编译不通过
  9. // 逆变
  10. List<?superApple>wildcardApples =newArrayList<Fruit>();
  11. // 逆变->方法的参数,对输入类型是逆变的:Apple->Fruit
  12. wildcardApples.add(newApple());

可见在Java泛型中通过extends关键字可以提供协变的泛型类型转换,通过supper可以提供逆变的泛型类型转换。

--------------------- 本文来自 OkidoGreen 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/z69183787/article/details/51598355?utm_source=copy

Java泛型中的协变和逆变

标签:article   net   ret   地址   cti   方法   类型转换   dog   代码   

原文地址:https://www.cnblogs.com/feng9exe/p/9760187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!