大数据之scala高级语法学习

Posted rain_1 ACM风雨历程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之scala高级语法学习相关的知识,希望对你有一定的参考价值。

协变

案例一:

   class Animal {}
    class Bird extends Animal {}
    class Animal {}
    class Bird extends Animal {}
    //协变
    class Covariant[T](t:T){}
    val cov = new Covariant[Bird](new Bird)
    val cov2:Covariant[Animal] = cov

c不能赋值给c2,因为Covariant定义成不变类型。

稍微改一下:

  class Animal {}
    class Bird extends Animal {}
    class Animal {}
    class Bird extends Animal {}
    //协变
    class Covariant[+T](t:T){}
    val cov = new Covariant[Bird](new Bird)
    val cov2:Covariant[Animal] = cov

因为Consumer定义成协变类型的,所以Covariant[Bird]是Covariant[Animal]的子类型,所以它可以被赋值给c2。

 Scala的逆变:

    class Animal {}
    class Bird extends Animal {}
    class Contravariant[-T](t: T) {
    }
    val c: Contravariant[Animal] = new Contravariant[Animal](new Animal)
    val c2: Contravariant[Bird] = c

这里Consumer[-T]定义成逆变类型,所以Contravariant[Animal]被看作Contravariant[Animal]的子类型,故c可以被赋值给c2。

以上是关于大数据之scala高级语法学习的主要内容,如果未能解决你的问题,请参考以下文章

好程序员大数据学习路线分享Scala系列之集合操作函数

大数据学习之Scala语言基本语法学习36

2021年大数据常用语言Scala:基础语法学习 方法

大数据Scala学习—列表 集与映射

大数据Scala学习—列表 集与映射

2021年大数据常用语言Scala:基础语法学习 字符串