第50讲:Scala中Variance变化点
王家林亲授《DT大数据梦工厂》大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
土豆:http://www.tudou.com/programs/view/85BX4YBSdSI/
优酷:http://v.youku.com/v_show/id_XMTI4MjU5NjIyMA==.html?from=s1.8-1-1.2
爱奇艺:http://www.iqiyi.com/w_19rrxj6hmh.html#vfrm=2-3-0-1
腾讯视频: http://v.qq.com/boke/page/y/0/j/y0159g6di6j.html
技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群
DT大数据梦工厂① :462923555
DT大数据梦工厂②:437123764
DT大数据梦工厂③ :418110145
微信公众账号: DT_Spark
王家林老师微信号: 18610086859
王家林老师QQ: 1740415547
王家林老师邮箱: 18610086859@126.com
本视频由王家林老师, 亲自讲解, 完全通过代码实战把您带人大数据的时代.
package com.parllay.scala.oop /**
* Created by richard on 15-8-4.
* 第50讲:Scala中Variance变化点
*/ class Animal
class Bird extends Animal
class Chicken extends Animal class Pair22[+T](var p: T){
//def haveLegs(p1: T) = println("")
} object Variance_Point { /**
根据Liskov替换原则,如果A是B的子类,那么能适用于B的所有操作,都适用于A。
让我们看看这边Function1的定义,是否满足这样的条件。
假设Bird是Animal的子类,那么看看下面两个函数之间是什么关系: def f1(x: Bird): Animal // instance of Function1[Bird, Animal]
def f2(x: Animal): Bird // instance of Function1[Animal, Bird]
在这里f2的类型是f1的类型的子类。为什么? 我们先看一下参数类型,根据Liskov替换原则,f1能够接受的参数,f2也能接受。
在这里f1接受的Bird类型,f2显然可以接受,因为Bird对象可以被当做其父类Animal的对象来使用。 再看返回类型,f1的返回值可以被当做Animal的实例使用,f2的返回值可以被当做Bird的实例使用,
当然也可以被当做Animal的实例使用。 所以我们说,函数的参数类型是逆变的,而函数的返回类型是协变的。 那么我们在定义Scala类的时候,是不是可以随便指定泛型类型为协变或者逆变呢?答案是否定的。
通过上面的例子可以看出,如果将Function1的参数类型定义为协变,或者返回类型定义为逆变,
都会违反Liskov替换原则,因此,Scala规定,协变类型只能作为方法的返回类型,
而逆变类型只能作为方法的参数类型。类比函数的行为,结合Liskov替换原则,
就能发现这样的规定是非常合理的。
* @param args
*/
def main(args: Array[String]) { } }
第50讲:Scala中Variance变化点的更多相关文章
- Scala 深入浅出实战经典 第49课 Scala中Variance代码实战(协变)
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.spl ...
- Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第57讲:Scala中Dependency Injection实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第55讲:Scala中Infix Type实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- TreeView树形控件递归绑定数据库里的数据
TreeView树形控件递归绑定数据库里的数据. 第一种:性能不好 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 <% ...
- monkeyrunner功能函数
MonkeyRunner Command Summary 1. #导入模块; from com.android.monkeyrunner import MonkeyRunner, MonkeyD ...
- Oracle一个中文汉字占用几个字节
Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定 查看oracle server端字符集 select userenv('language') from dual; 如 ...
- [f]JQ cookie插件
jQuery.cookie = function(name, value, options) { if (typeof value != 'undefined') { options = option ...
- struts2--文件上传与下载
1.文件上传: --表单准备: > 需把HTML表单的enctype属性设置为multipart/form-data; > 需把HTML表单的method属性设置为post: > 需 ...
- Linux splint命令
一.简介 splint是一个针对C语言的开源程序静态分析工具. 二.安装配置 1)yum安装 yum install -y splint 2)源码安装 http://www.splint.org/ 配 ...
- SQLSERVER DBA容易犯的十个错误
SQLSERVER DBA容易犯的十个错误 翻译自:http://sqlsentry.tv/top-10-administrative-mistakes-on-sql-server/ 除了排名前十的错 ...
- 《Linux内核设计与实现》读书笔记(十四)- 块I/O层
最近太忙,居然过了2个月才更新第十四章.... 主要内容: 块设备简介 内核访问块设备的方法 内核I/O调度程序 1. 块设备简介 I/O设备主要有2类: 字符设备:只能顺序读写设备中的内容,比如 串 ...
- MVC中使用RazorPDF创建PDF
这篇文章主要介绍使用Nuget package中的RazorPDF简单的创建PDF的方法. 关于RazorPDF 这个Nuget Package由Al Nyveldt创建.它内部使用ITextShar ...
- [转]新兵训练营系列课程——平台RPC框架介绍
原文:http://weibo.com/p/1001643875439147097368 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框 ...