第50讲:Scala中Variance变化点及其在Spark中的应用源码解析学习笔记

50讲:ScalaVariance变化点及其在Spark中的应用源码解析学习笔记

scala中的variance的变化点

variance叫型变,一种协变一种逆变

函数参数是逆变的,返回值是协变的。

如果遵循这种原则,会发现实际用函数时确实是这样。

但问题:一个类型的具体对象,可能既是逆变又要求协变。

这需要类型保持不变。

 

scala中的数组,array泛型可以指定具体类型,

array[worker],array[person]

虽然workerperson的子类型,但不能说array[worker]array[person]的子类型。

假设把array[person]=array[worker],这是非法的。,

 

class P[+T](val first : T, val second: T){

//如果改成:class P[+T](var first : T, var second: T){  逆变的位置上出现了协变的具体变量。firstsecond是逆变的

  def replaceFirst[R >: T](newFirst : R) = new P[R](newFirst, second)

  //我们想用newFirst取代Firstsecond不变。RT的父类,newFirstR类型的。

  //改成这样是不行的:def replaceFirst(newFirst : T) = new P[T](newFirst, second)

}

object Variance_Positions {

  def main(args:Array[String]){

  }

}

 

我们用型变是用在类或方法上,不会用在对象上。

对象本身是不能型变的。

 

以上内容是从王家林老师DT大数据课程第50讲的学习笔记。
DT大数据微信公众账号:DT_Spark  

王家林老师QQ:1740415547 

王家林老师微信号:18610086859
百度网盘共享的DT大数据梦工厂王家林老师第1-91讲的视频内容:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group

51CTO视频网址:http://edu.51cto.com/index.php?do=lesson&id=67904

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值