第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值