看源码的时候看到:

trait ExtensionId[T <: Extension] {

没见过这个符号啊<:

Scala上界(<:)和下界(>:)

1) U >: T

这是类型下界的定义,也就是U必须是类型T的父类(或本身,自己也可以认为是自己的父类)。

2) S <: T

这是类型上界的定义,也就是S必须是类型T的子类(或本身,自己也可以认为是自己的子类)。

然后scala中的泛型符号是[T],而不是Java中的<T>.

对于一个带类型参数的类型,比如 List[T],如果对A及其子类型B,满足 List[B]也符合List[A]的子类型,那么就称为covariance(协变) ,

如果 List[A]是 List[B]的子类型,即与原来的父子关系正相反,则称为contravariance(逆变)。

如果一个类型支持协变或逆变,则称这个类型为variance(翻译为可变的或变型),否则称为invariance(不可变的)

而Scala支持,可以在定义类型时声明(用加号表示为协变,减号表示逆变),如:

tarit Person[+T]{} --协变,在这种情况下,假设S类型是A类型的子类,则Person[S]类型可泛化成Person[T]的子类,也就是被参数化类型的泛化方向与参数类型的方向是一致的,所以称为协变。

tarit Person[-T]{}  --逆变,这种情况下,当类型S是类型A的子类型,则Person[A]反过来可以认为是Person[S]的子类型。也就是被参数化类型的泛化方向与参数类型的方向是相反的,所以称为逆变

...

http://blog.csdn.net/w517424787/article/details/51201468

转载于:https://www.cnblogs.com/guazi/p/7027600.html

(转)Scala中协变(+)、逆变(-)、上界(:)、下界(:)简单介绍相关推荐

  1. C#泛谈 —— 变体(协变/逆变)

    有如下四个类. public class Animal{}public class Mammal : Animal{}public class Dog : Mammal{public void Eat ...

  2. 12:设计模式、泛型、上下界、视图界定、上下文界定、协变逆变不变

    经典的 WordCount 的讲解 示例代码如下: package com.atguigu.chapter14.homework.wordcount/*val lines = List("a ...

  3. 大数据技术之_16_Scala学习_12_设计模式+泛型、上下界、视图界定、上下文界定、协变逆变不变

    大数据技术之_16_Scala学习_12 第十七章 设计模式 17.1 学习设计模式的必要性 17.2 掌握设计模式的层次 17.3 设计模式的介绍 17.4 设计模式的类型 17.5 简单工厂模式( ...

  4. 跟着小老弟来学习Kotlin中的逆变和协变

    /   今日科技快讯   / 近日,小米创始人.董事长兼CEO雷军在抖音上开启了其直播带货的首秀.从晚上8点开播,到晚上10点,销售额就已经破亿.包括1000台售价49999元的透明电视在内的商品一推 ...

  5. java中的逆变、协变、不变概念讲解转载自http://www.cnblogs.com/en-heng/p/5041124.html,感谢编程路上的前辈们!

    En-Heng 无他,但手熟尔 博客园 首页 新随笔 联系 订阅 管理 随笔 - 32  文章 - 0  评论 - 33 Java中的逆变与协变 看下面一段代码 Number num = new In ...

  6. 协变逆变java_Java中的逆变与协变

    什么是逆变与协变 协变(Covariance) 如果B是A的子类,并且F(B)也是F(A)的子类,那么F即为协变 逆变(Contravariance) 如果B是A的子类,并且F(B)成了F(A)的父类 ...

  7. 协变逆变java_Java中的协变与逆变

    Java作为面向对象的典型语言,相比于C++而言,对类的继承和派生有着更简洁的设计(比如单根继承). 在继承派生的过程中,是符合Liskov替换原则(LSP)的.LSP总结起来,就一句话: 所有引用基 ...

  8. 泛型型协变逆变_Java泛型类型简介:协变和逆变

    泛型型协变逆变 by Fabian Terh 由Fabian Terh Java泛型类型简介:协变和逆变 (An introduction to generic types in Java: cova ...

  9. 10天学会kotlin DAY7 接口 泛型 协变 逆变

    kotlin 接口 泛型 协变 逆变 前言 1.接口的定义 2.抽象类 3.定义泛型类 4.泛型函数 5.泛型变换 6.泛型类型约束 7.vararg 关键字(动态参数) 8.[] 操作符 9.out ...

  10. UPS电源中的逆变电路与Simulink仿真

    一.设计题目: UPS电源中的逆变电路 主要指标及要求: 输入电压240V 输出电压220/230/240V 效率>90% 二.设计思路.方案选择及电路工作原理: 采用单相全桥逆变电路,并使用双 ...

最新文章

  1. 我亲手调教的AI,竟然开始歧视我了!
  2. 工信部:今年将发放5G临时牌照,预计下半年5G手机投放市场
  3. 用Maven插件生成Mybatis代码/数据库
  4. getResources()方法
  5. 国内外包行业的现状分析
  6. 踩坑:VScode 集成 eslint 插件
  7. 微服务升级_SpringCloud Alibaba工作笔记0013---SpringCloud Alibaba简介
  8. 遗传算法MATLAB工具箱的下载与安装
  9. 解决路由环路问题的探讨
  10. winform 图片压缩大小为原图的一半_SCI论文图片编辑——常见十问十答
  11. 我遇到的JPA中事务回滚的问题
  12. 网络型多媒体计算机教室功能是,多媒体网络教室中的信息技术教学
  13. 请领导批阅文件怎么说_请领导批复文件怎么说
  14. 技术不牛如何才拿到国内IT巨头的Offer
  15. HUAWEI 机试题:VLAN资源池
  16. 电脑tdr太低是什么意思_SOLIDWORKS TDR 错误解决办法
  17. 通过爬虫获取第五人格游戏信息整理并分析(一)
  18. 来,带你实现基于网络通信QQ聊天室-----QQ有这么强!!!
  19. iOS远程推送原理及实现过程
  20. IDCE-CT系列蓄电池放电容量测试仪(蓄电池容量检测仪/放电仪)功能介绍

热门文章

  1. 老李分享:《Linux Shell脚本攻略》 要点(二)
  2. CVS update常用技巧
  3. 彻底解决android读取中文txt的乱码(自动判断文档类型并转码
  4. android之Fragment(官网资料翻译)
  5. 剪映专业版mac版本要求 剪映mac版最新版更新
  6. HashSet和HashMap的区别 1
  7. Read Asia Embedded fell
  8. MVC4使用SignalR出现$.connection is undefined错误备忘
  9. 双系统下修复grub
  10. ASP.NET验证控件之RegularExpressionValidator