1. class GaoJi
  2.  
  3. class ZhongJi extends GaoJi
  4.  
  5. //协变===========================
  6. class Card[+T]
  7.  
  8. val cgaoji = new Card[GaoJi]
  9. val czhongji = new Card[ZhongJi]
  10.  
  11. //协变之后Card[ZhongJi]犹如继承了Card[GaoJi]
  12. def test(card: Card[GaoJi]): Unit = {
  13. println(123)
  14. }
  15.  
  16. test(cgaoji)
  17. test(czhongji)
  18.  
  19. //逆变===========================
  20. class Card1[-T]
  21.  
  22. val cgaoji1 = new Card1[GaoJi]
  23. val czhongji1 = new Card1[ZhongJi]
  24.  
  25. //逆变之后Card[GaoJi]犹如Card[ZhongJi]的父类也可被接收
  26. def test1(card: Card1[ZhongJi]): Unit = {
  27. println(678)
  28. }
  29.  
  30. test1(cgaoji1)
  31. test1(czhongji1)

scala-协变和逆变的更多相关文章

  1. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...

  2. Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转自:http://fineqtbull.iteye.com/blog/477994#bc2364938 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和 ...

  3. Scala中的协变,逆变,上界,下界等

    Scala中的协变,逆变,上界,下界等 目录 [−] Java中的协变和逆变 Scala的协变 Scala的逆变 下界lower bounds 上界upper bounds 综合协变,逆变,上界,下界 ...

  4. (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍

    看源码的时候看到: trait ExtensionId[T <: Extension] { 没见过这个符号啊<: Scala上界(<:)和下界(>:) 1) U >: T ...

  5. Scala教程之:深入理解协变和逆变

    文章目录 函数的参数和返回值 可变类型的变异 在之前的文章中我们简单的介绍过scala中的协变和逆变,我们使用+ 来表示协变类型:使用-表示逆变类型:非转化类型不需要添加标记. 假如我们定义一个cla ...

  6. Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变

    1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...

  7. 不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事

    阿袁工作的第1天: 不变(Invariant), 协变(Covarinat), 逆变(Contravariant)的初次约 阿袁,早!开始工作吧. 阿袁在笔记上写下今天工作清单: 实现一个scala类 ...

  8. 从底层实现剖析Kotlin协变与逆变的原理

    继续还是探究协变与逆变,在正式开始之前,先来对Kotlin和Java的协变与逆变进行一个对比: 1.Kotlin是声明处协变:而在Java中是在使用处协变: 如何理解,我们先来回顾一下在Java使用协 ...

  9. C#4.0泛型的协变,逆变深入剖析

    C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...

  10. C#协变和逆变

    我们知道在C#中,是可以将派生类的实例赋值给基类对象的.

随机推荐

  1. 找不到指定的 VM 安装:类型 标准 VM,名称 jre7

    问题背景是这样 原来使用的是jre7.0.55,后来为了安装使用 layabox IDE ,然后装了jdk_8u144 之后需要切换环境变量 之后java项目调试的时候重新设置了jdk,没问题. 直到 ...

  2. Atitti 创业团队vs打工的团队 attilax总结

    Atitti 创业团队vs打工的团队 attilax总结 创业公司的性质与特点  热情,创新,效率 ,使命 为什么阿里员工很热情?因为他们大概都知道公司要做什么事情,也知道公司的使命.他们经常会跳出来 ...

  3. Asp.Net百度站长工具的主动推送功能

    public static string PostUrl(string[] urls) { try { string formUrl = "http://data.zz.baidu.com/ ...

  4. 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,

    第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...

  5. sql 同步2个表中的一个字段数据

    update PMS.tenant_contract a inner join(select id,home_id from PMS.owner_contract) c on a.id = c.id ...

  6. 配置python开发环境(Eclipse + pyDev)

    jdk-11.0.2eclipse 2018-12python 3.7.2 1. install jdk, 配置环境变量 新建JAVA_HOME 系统变量,C:\Program Files\Java\ ...

  7. linux系统关闭指定服务的方式

    1.根据名称称查找并关闭:pgrep -f 名称 | xargs kill -9 2.根据端口称查找并关闭:lsof -i:端口 | grep LISTEN|awk '{print $2}'|xarg ...

  8. Ubuntu 安装mono

    Ubuntu 安装mono 我的系统:Ubuntu 16   Mono参考: http://www.mono-project.com/docs/getting-started/install/linu ...

  9. VS2013生成XP独立运行程序

    一.首先选择静态库  如果设置不对会出现如下错误 fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll v ...

  10. 最小生成树 prime+heap

    改一个错误真不容易,刚开始没有加上used数组,没有判断每个顶点是否已经加入到数组当中,结果同一个顶点被pop不止一次. struct edge{int to,cost;}; typedef pair ...