scala-协变和逆变
class GaoJi class ZhongJi extends GaoJi //协变===========================
class Card[+T] val cgaoji = new Card[GaoJi]
val czhongji = new Card[ZhongJi] //协变之后Card[ZhongJi]犹如继承了Card[GaoJi]
def test(card: Card[GaoJi]): Unit = {
println(123)
} test(cgaoji)
test(czhongji) //逆变===========================
class Card1[-T] val cgaoji1 = new Card1[GaoJi]
val czhongji1 = new Card1[ZhongJi] //逆变之后Card[GaoJi]犹如Card[ZhongJi]的父类也可被接收
def test1(card: Card1[ZhongJi]): Unit = {
println(678)
} test1(cgaoji1)
test1(czhongji1)
scala-协变和逆变的更多相关文章
- scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
转载自 fineqtbull http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
转自:http://fineqtbull.iteye.com/blog/477994#bc2364938 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和 ...
- Scala中的协变,逆变,上界,下界等
Scala中的协变,逆变,上界,下界等 目录 [−] Java中的协变和逆变 Scala的协变 Scala的逆变 下界lower bounds 上界upper bounds 综合协变,逆变,上界,下界 ...
- (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍
看源码的时候看到: trait ExtensionId[T <: Extension] { 没见过这个符号啊<: Scala上界(<:)和下界(>:) 1) U >: T ...
- Scala教程之:深入理解协变和逆变
文章目录 函数的参数和返回值 可变类型的变异 在之前的文章中我们简单的介绍过scala中的协变和逆变,我们使用+ 来表示协变类型:使用-表示逆变类型:非转化类型不需要添加标记. 假如我们定义一个cla ...
- Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变
1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...
- 不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事
阿袁工作的第1天: 不变(Invariant), 协变(Covarinat), 逆变(Contravariant)的初次约 阿袁,早!开始工作吧. 阿袁在笔记上写下今天工作清单: 实现一个scala类 ...
- 从底层实现剖析Kotlin协变与逆变的原理
继续还是探究协变与逆变,在正式开始之前,先来对Kotlin和Java的协变与逆变进行一个对比: 1.Kotlin是声明处协变:而在Java中是在使用处协变: 如何理解,我们先来回顾一下在Java使用协 ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- C#协变和逆变
我们知道在C#中,是可以将派生类的实例赋值给基类对象的.
随机推荐
- mysql中实现字符串分割sp_split
sp_split : DELIMITER $$ CREATE DEFINER = 'test_user'@'%' PROCEDURE sp_split (IN p_str varchar(2000 ...
- CentOS 7.x 用shell增加、删除端口
一.在/usr/local/sbin/下创建port文件,不要扩展名,并给权限 chom 777 port #!/bin/bash num=$# ok=0 if [ ${num} == 1 ]; t ...
- Windows利用文件夹映射来同步文件
在windows服务器上有时有这样的需求: 你的文件在f:\test中,但由于其它原因用户访问的是e:\test,如果又希望e:\test 中的文件与f:\test的保持同步,除了用同步软件来做外,可 ...
- Linux: Linux C 获取当前系统时间的时间戳(精确到秒、毫秒、微秒) gettimeofday
说明 获取当前的时间的秒数和微秒数本方法需要用到 gettimeofday() 函数,该函数需要引入的头文件是 <sys/time.h> . 函数说明 int gettimeofday ...
- 【原创 Hadoop&Spark 动手实践 6】Spark 编程实例与案例演示
[原创 Hadoop&Spark 动手实践 6]Spark 编程实例与案例演示 Spark 编程实例和简易电影分析系统的编写 目标: 1. 掌握理论:了解Spark编程的理论基础 2. 搭建 ...
- php项目踩到的empty函数的一个坑
报错信息: PHP Fatal error: Can't use function return value in write context in /目录省略.../XXService.php on ...
- Hadoop相关基础知识
因为个人对这块的知识也不熟悉,所以大多内容来源于网络. 1. Hadoop项目框架 2. Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以 ...
- iOS开发下载文件速度计算
当我们写下载界面的时候,需要向用户展示每秒下载多少KB,这个时候就需要计算速度.如下: 我用的是AFNetworking来做下载的,我们拿AFHTTPRequestOperation来举列,AFHTT ...
- perl控制流介绍(if条件,while,for循环,foreach)
1. 语句块:{ }之间的部分即为BLOCK语句块. 2. 条件语句:if ( expression ) BLOCK; if ( expression ) BLOCK1else BLOCK2 ...
- 【javascript】定时器组件
'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...