大数据之scala高级语法学习
2016-08-27 08:45
435 查看
协变
案例一:
c不能赋值给c2,因为Covariant定义成不变类型。
稍微改一下:
因为Consumer定义成协变类型的,所以Covariant[Bird]是Covariant[Animal]的子类型,所以它可以被赋值给c2。
Scala的逆变:
这里Consumer[-T]定义成逆变类型,所以Contravariant[Animal]被看作Contravariant[Animal]的子类型,故c可以被赋值给c2。
案例一:
class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} //协变 class Covariant[T](t:T){} val cov = new Covariant[Bird](new Bird) val cov2:Covariant[Animal] = cov
c不能赋值给c2,因为Covariant定义成不变类型。
稍微改一下:
class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} //协变 class Covariant[+T](t:T){} val cov = new Covariant[Bird](new Bird) val cov2:Covariant[Animal] = cov
因为Consumer定义成协变类型的,所以Covariant[Bird]是Covariant[Animal]的子类型,所以它可以被赋值给c2。
Scala的逆变:
class Animal {} class Bird extends Animal {} class Contravariant[-T](t: T) { } val c: Contravariant[Animal] = new Contravariant[Animal](new Animal) val c2: Contravariant[Bird] = c
这里Consumer[-T]定义成逆变类型,所以Contravariant[Animal]被看作Contravariant[Animal]的子类型,故c可以被赋值给c2。
相关文章推荐
- JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺
- 大数据之scala基本语法学习
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- OpenGL学习——函数语法(数据类型,函数命名方式,辅助库,平台独立性)
- J2SE学习笔记3 — Java基本语法(2)基本数据类型
- JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
- JavaScript高级程序设计(第3版)学习笔记2 js基础语法
- [LUA学习笔记04]Lua语法--数据类型
- php程序员学习javascript:第一章:javascript基本语法:数据类型
- 微软企业库5.0学习笔记实战数据验证模块----高级篇
- 微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
- php学习第一章:PHP基础语法(一)之PHP数据类型与PHP常量
- scala学习笔记☞二:简单语法练习
- UNIX环境高级编程学习之第六章系统数据文件和信息-取所有用户名和UID, GID
- UNIX环境高级编程学习之第六章系统数据文件和信息-实现uid to name
- JAVA高级视频_IO输入与输出 Java程序与其他进程的数据通讯 学习笔记
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- php学习笔记(3):PHP基本语法和数据类型:
- UNIX环境高级编程学习之第六章系统数据文件和信息-GID To GroupName
- 院外培训:GIS数据处理与建模高级培训班学习心得体会 来自