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

  • 相关阅读:
    51Nod1528 加号分配
    51Nod1679 连通率
    51Nod1679 连通率
    51Nod1426 沙拉酱括号
    51Nod1426 沙拉酱括号
    51Nod1678 lky与gcd
    51Nod1556 计算
    c学习第2天
    Stopwatch秒表的使用
    数据从.txt文件中导入数据库
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9760187.html
Copyright © 2011-2022 走看看