美文网首页
编程泛型中的协变与逆变

编程泛型中的协变与逆变

作者: areece | 来源:发表于2019-12-27 15:01 被阅读0次

泛型与型变

在强类型语言中,即使是使用泛型,我们也会希望能够对类型做一些限制,这些限制的一类称为型变。它回答的问题包括了两个方面:

  • 给我一个对象,这个对象必须是某种类型(当然子类型也是可以的,这可不就是面向对象编程的最基本的要求么),这是对生产者的要求;【协变】
  • 给你一个对象,你能不能吃得下。这是对消费者的要求【逆变】

协变

协变的意义在于如果我能够处理基类,你【生产者】给我一个子类对象,我也能够处理,我只是把它当作基类对象处理了。

逆变

逆变的意义在于我要求你能够处理某种类型,但是显然,我并不会要求你能够处理子类型,因为子类型可能会有无穷多,你【消费者】可能处理不了,但是如果你能够处理基类,最多你把我给你的对象当作基类对象处理就行了。也就是说对消费者的要求是:能够处理某种类型,或者它的基类(随便哪一层就可以)。

相关文章

  • 泛型编程中的型变

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

  • Kotlin学习笔记 - 泛型

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

  • JAVA泛型与类型安全

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

  • Java 泛型与通配符

    参考地址:《Java 泛型,你了解类型擦除吗?》 《Java中的逆变与协变》 《java 泛型中 T、E .....

  • Java协变和逆变

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

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

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

  • Scala 泛型协变与泛型边界

    代码准备 泛型协变 泛型协变、逆变、不变是指拥有泛型的类在声明和赋值时的对应关系。 协变:声明时泛型是父类,赋值时...

  • 编程泛型中的协变与逆变

    泛型与型变 在强类型语言中,即使是使用泛型,我们也会希望能够对类型做一些限制,这些限制的一类称为型变。它回答的问题...

  • Kotlin泛型的高级特性(六)

    泛型的高级特性1、泛型实化2、泛型协变3、泛型逆变 泛型实化 在Java中(JDK1.5之后),泛型功能是通过泛型...

  • Java中的桥接方法与泛型的逆变和协变

    泛型的协变和逆变是什么?对应于Java当中,协变对应的就是,而逆变对应的就是

网友评论

      本文标题:编程泛型中的协变与逆变

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