大数据系列修炼-Scala课程49
来源:互联网 发布:福州广电网络电视电话 编辑:程序博客网 时间:2024/05/17 23:51
大数据系列修炼-Scala课程49
核心内容:
1、Scala中型变(Variance)代码实战解析及其在Spark中的应用源码解析
1、Scala中型变(Variance)核心重点总结
1>在Java当中,若具体类型之间有相应的子类关系,在相应的泛型当中并没有相应的子类关系;然而在Scala当中,
通过型变的语法机制,可以保证在相应的泛型当中也有相同的子类关系,或者相反的子类关系;其中相同的子类关系叫做协变(+),
相反的子类关系叫做逆变(-)。
2>泛型在具体使用的时候需要指明具体的数据类型,若具体类型之间存在一种关系,而这种关系作用在泛型上时仍能保持相同或者
相反的关系,则称这个类型是可变的。
3>如果一个类型支持协变或者逆变,则称这个类型为Variance(可变的),否则称之为不可变的。
4>在Java当中,泛型类型都是不可变的InVariance,比如List并不是List的子类型,即在Java当中并不支持在定义
一个类型或者在声明一个类型时说明它具有逆变或者协变的关系;但是Scala支持,在scala当中可以在定义一个类型或者在声明一个类
型时说明它具有逆变或者协变的关系,其中用+号表示协变,用-号表示逆变。
5>型变的泛型类型并不会被子类继承,若父类声明为Variance(型变的),若子类仍想保持可变的,仍需要声明为可变类型。
实例程序1:在Java当中,泛型类型都是不可变的InVariance:
public class App1{ public static void main(String[] args) { ArrayList<Integer> arr = new ArrayList<Integer>(10); arr.add(10); arr.add(100); //下面的写法是不对的: //ArrayList<Object> arr = new ArrayList<Integer>(10); } }
实例程序2:在Scala当中,通过型变的语法机制,可以保证在相应的泛型当中也有相同的子类关系,或者相反的子类关系
class Persion class Student extends Persionclass A[+T](val value:T)class B[+T](value:T) extends A[T](value)//协变的例子:object App6 { def main(args:Array[String]):Unit= { val aa:B[Persion] = new B[Student](new Student()) //Student是Persion的父类,B[Persion]仍是B[Student]的父类。 }}
实例程序3:在Scala当中,通过型变的语法机制,可以保证在相应的泛型当中也有相同的子类关系,或者相反的子类关系
class Persion class Student extends Persionclass A[-T]//逆变的例子:object App6 { def main(args:Array[String]):Unit= { val aa:A[Student] = new A[Persion]() //Student本来是Persion的子类,但是A[Student]是A[Persion]的父类 }
实例程序4:型变的泛型类型并不会子类继承
class Persion class Student extends Persionclass A[+T](val aa:T)class B[+T](aa:T) extends A[T](aa) //泛型B[T]仍然需要声明为可变中的协变//逆变的例子:object App6 { def main(args:Array[String]):Unit= { val bb:B[Persion] = new B[Student](new Student) }}
- 大数据系列修炼-Scala课程49
- 大数据系列修炼-Scala课程01
- 大数据系列修炼-Scala课程02
- 大数据系列修炼-Scala课程03
- 大数据系列修炼-Scala课程04
- 大数据系列修炼-Scala课程05
- 大数据系列修炼-Scala课程06
- 大数据系列修炼-Scala课程07
- 大数据系列修炼-Scala课程08
- 大数据系列修炼-Scala课程09
- 大数据系列修炼-Scala课程10
- 大数据系列修炼-Scala课程11
- 大数据系列修炼-Scala课程12
- 大数据系列修炼-Scala课程15
- 大数据系列修炼-Scala课程17
- 大数据系列修炼-Scala课程18
- 大数据系列修炼-Scala课程19
- 大数据系列修炼-Scala课程20
- 大数据系列修炼-Scala课程48
- python With关键字用法(2)
- 关于Win7 64位 mysql 5.7下载安装问题
- Windows caffe vs2013训练自己的数据
- 二叉树的实现
- 大数据系列修炼-Scala课程49
- 九个Console命令,让 JS 调试更简单
- HTTP协议
- xml解析--通讯管理系统(图形界面版)
- 初学者读论文
- c++写杨辉三角
- android 安装 SDK的时候报错!!! 他说拒绝访问https://dl-ssl.google.com??
- iScroll中那些需要理解的细节部分
- MemoryHook 内存统计