zoukankan      html  css  js  c++  java
  • 大数据之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。

  • 相关阅读:
    好的学习资源
    对paper有用的idea
    斜杠青年
    简书随笔
    点云专业英文单词
    通过 UDP 发送数据的简单范例
    简单的聊天时范例(客户端)
    键盘输入
    简单的传输文件范例
    编写serversocket简单示例1
  • 原文地址:https://www.cnblogs.com/rain-1/p/5812261.html
Copyright © 2011-2022 走看看