第50讲:Scala中Variance变化点及其在Spark中的应用源码解析学习笔记
scala中的variance的变化点
variance叫型变,一种协变一种逆变
函数参数是逆变的,返回值是协变的。
如果遵循这种原则,会发现实际用函数时确实是这样。
但问题:一个类型的具体对象,可能既是逆变又要求协变。
这需要类型保持不变。
scala中的数组,array泛型可以指定具体类型,
如array[worker],array[person]
虽然worker是person的子类型,但不能说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){ 逆变的位置上出现了协变的具体变量。first和second是逆变的
def replaceFirst[R >: T](newFirst : R) = new P[R](newFirst, second)
//我们想用newFirst取代First,second不变。R是T的父类,newFirst是R类型的。
//改成这样是不行的: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