美文网首页
协变与逆变

协变与逆变

作者: stevobm | 来源:发表于2018-01-25 16:46 被阅读0次
  • 协变:用窄类型替代宽类型,如子类代替父类,符合里氏替换原则
  • 逆变:用宽类型替代窄类型,与里氏替换相反,所以叫“逆”变

Java泛型本身不支持协变和逆变,但是可以通过通配符模拟。

假设Apple属于Fruit的子类,代码如下:

List<? extends Fruit> list = new ArrayList<Apple>(); 
List<? super Apple> list2 = new ArrayList<Fruit>();

Scala泛型原生支持协变(+)和逆变(-)。为了符合里氏替换原则,子类函数的参数类型是逆变的,而返回类型是协变的(可以理解为子类可以处理比父类更多的输入类型,但是输出类型比父类更加严格)。

参考

Java语言中的协变和逆变
Scala的协变(+),逆变(-),上界(<:),下界(>:)

相关文章

  • Kotlin 泛型协变与逆变的理解

    协变与逆变定义 逆变与协变用来描述类型转换后的继承关系 协变:如果 A 是 B 的子类型,并且Generic 也...

  • JAVA泛型与类型安全

    1. 基础泛型 2. 协变与逆变与不变 协变 简单来说即: Java中的数组是协变的 逆变与协变相对,逆转了类型关...

  • Java协变和逆变

    泛型的协变与逆变 协变与逆变用来描述类型转换(type transformation)后的继承关系,其定义如下:如...

  • Flow中对逆变和协变的处理

    协变逆变不变的解释 协变:f(Employee) extend f(Person) 逆变:f(Person) ...

  • 泛型编程中的型变

    在泛型编程中,经常会提到型变。型变分为两种:协变与逆变。协变covariant表示与泛型参数T的变化相同,而逆变c...

  • Kotlin学习笔记 - 泛型

    1. 基本用法 2. 型变 型变包括 协变、逆变、不变 三种: 协变:泛型类型与实参的继承关系相同 逆变:泛型类型...

  • Java中的逆变与协变

    什么是逆变与协变 协变(Covariance) 如果B是A的子类,并且F(B)也是F(A)的子类,那么F即为协变 ...

  • 协变与逆变

    必看 协变与逆变 | 深入理解 TypeScript TypeScript: Playground

  • Scala 通俗易懂 ---- 协变、逆变、不变

    协变、逆变、不变 Scala 语言中协变、逆变、不变是指拥有泛型的类型,在声明和赋值时的对应关系 协变:声明时泛型...

  • 协变与逆变

    协变:用窄类型替代宽类型,如子类代替父类,符合里氏替换原则 逆变:用宽类型替代窄类型,与里氏替换相反,所以叫“逆”...

网友评论

      本文标题:协变与逆变

      本文链接:https://www.haomeiwen.com/subject/exgvaxtx.html