scala-协变和逆变

Posted soft.push("zzq")

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala-协变和逆变相关的知识,希望对你有一定的参考价值。

class GaoJi

class ZhongJi extends GaoJi

//协变===========================
class Card[+T]

val cgaoji = new Card[GaoJi]
val czhongji = new Card[ZhongJi]

//协变之后Card[ZhongJi]犹如继承了Card[GaoJi]
def test(card: Card[GaoJi]): Unit = {
  println(123)
}

test(cgaoji)
test(czhongji)

//逆变===========================
class Card1[-T]

val cgaoji1 = new Card1[GaoJi]
val czhongji1 = new Card1[ZhongJi]

//逆变之后Card[GaoJi]犹如Card[ZhongJi]的父类也可被接收
def test1(card: Card1[ZhongJi]): Unit = {
  println(678)
}

test1(cgaoji1)
test1(czhongji1)

 

以上是关于scala-协变和逆变的主要内容,如果未能解决你的问题,请参考以下文章

scala中泛型,协变和逆变

如何检查函数中元素的协变和逆变位置?

通用优先级队列中的协变和逆变类型

协变和逆变之疑问

Java泛型中的协变和逆变

Typescript中的协变和逆变