49.Scala中Variance代码实战及其在Spark中的应用源码解析
来源:互联网 发布:虚拟机的网络模式 编辑:程序博客网 时间:2024/05/16 14:10
eg: List[T] A:父类 B:子类 List[A]是否是List[B]的父类? 是的话,可以进行型变(协变)
协变:和具体类型的继承关系是一致的。比如A是B的父类,List[A]是List[B]的父类
逆变:和具体类型的继承关系是相反的。比如A是B的父类,List[B]是List[A]的父类
但是在Java中,String是Obejct的子类,List[String]并不是List[Object]的子类。
而且Java并不支持在定义一个类型时声明它为协变或逆变的情况。
只有在使用时才可以这么表达,例如:
List<? extends Object> list = new ArrayList<String>() //String是Object的子类,ArrayList[String]是List[Object]的子类。
在scala中可以这么表达同样的意思:
val list : List[_ <: Any] = List[String]("Spark")
class Personclass Student extends Personclass C[+T](val args : T)//注意一点:如果要继承一个型变的泛型类型,那具体子类也必须保持是型变的。class S[+T](arg : T) extends C[T](arg)trait Friend[-T]{ def makeFriend(somebody : T)}object Variance_49 { def makeFriendWithYou(s : Student, f : Friend[Student]){ f.makeFriend(s) } def main(args: Array[String]): Unit = { val value : C[Person] = new C[Student](new Student) }}
因为在scala中可以表达这种语法,所以在Spark中很少看到类似这样(C[+T])的表达。
参考资料来源于大数据梦工厂 深入浅出scala 第49讲 由王家林老师讲解
阅读全文
0 0
- 49.Scala中Variance代码实战及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第49讲:Scala中Variance代码实战及其在Spark中的应用源码解析
- 第49讲:Scala中Variance代码实战及其在Spark中的应用源码解析学习笔记
- scala-43:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- scala-45:Scala中Context Bounds代码实战及其在Spark中的应用源码解析
- 50.Scala中Variance变化点及其在Spark中的应用源码解析
- 43.Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- 44.Scala中View Bounds代码实战及其在Spark中的应用源码解析
- 45.Scala中Context Bounds代码实战及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第50讲:Scala中Variance变化点及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析
- 第50讲:Scala中Variance变化点及其在Spark中的应用源码解析学习笔记
- 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析学习笔记
- 第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析学习笔记
- scala-46: ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析
- 47.Scala多重界定代码实战及其在Spark中的应用源码解析
- java compiler level does not match the version of the installed java project facet错误的解决
- KMP算法的部分匹配值的计算
- Cg Programming/Unity/Order-Independent Transparency
- Lucene原理分析
- mysql密码管理
- 49.Scala中Variance代码实战及其在Spark中的应用源码解析
- Java常用数据结构之HashMap
- PHP初识
- ???Train Seats Reservation
- Java中ArrayList类详解(转载)
- error: ‘exit’ was not declared in this scope 的解决方法
- 进程信号课堂笔记
- keys
- 解决APP冷启动白屏/黑屏的问题