zoukankan      html  css  js  c++  java
  • Java泛型中的协变和逆变

    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

  • 相关阅读:
    hdu 1253
    poj 2531 Network Saboteur
    rwkj 1501 数据结构:图的DFS遍历
    rwkj 1306 素数========拓展
    nyist 91 阶乘之和
    nyist 65 另一种阶乘问题
    nyist 31 5个数求最值
    nyist 22 素数求和
    向量 vector
    字符串 统计 ,删除,连接,变换
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9760187.html
Copyright © 2011-2022 走看看