第81讲:Scala中List的构造是的类型约束逆变、协变、下界

关于逆变与协变相关知识,可以参考之前的章节。

这里主要是对 list 中 cons(::) 操作过程讲解

代码

abstract class Big_Data

class Hadoop extends Big_Data
class Spark extends Big_Data

object List_Constructor_Internals {
  def main(args: Array[String]) {
     val hadoop = new Hadoop:: Nil
     val big_data = new Spark::hadoop

  }
}

代码通过 命令行执行结果为:
scala> abstract class Big_Data
defined class Big_Data

scala> class Hadoop extends Big_Data
defined class Hadoop

scala> class Spark extends Big_Data
defined class Spark

scala> val hadoop = new Hadoop:: Nil
hadoop: List[Hadoop] = List(Hadoop@654b72c0)

scala> val big_data = new Spark::hadoop
big_data: List[Big_Data] = List(Spark@3f29e26, Hadoop@654b72c0)

通过运行,发现 val big_data = new Spark::hadoop,操作后,返回的是 List[Big_Data]

由于此操作是对list 的::操作, 可以肯定由此操作引起的,下面是::操作源代码

 def ::[B >: A](x : B) : scala.collection.immutable.List[B] = { /* compiled code */ }

通过源码发现返回值为 List[B] 是基类,是协变, 参数 是 逆变的过程
当传入 new Spark 参数时,scala 编译器自动转化为其父类型 Big_Data

参考资料:

百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0
微信号:18610086859
DT大数据微信公众账号:DT_Spark
DT大数据梦工厂交流群:① 462923555 ②418110145 ③437123764

你可能感兴趣的:(scala)