(转)Scala中协变(+)、逆变(-)、上界(:)、下界(:)简单介绍
看源码的时候看到:
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中协变(+)、逆变(-)、上界(:)、下界(:)简单介绍相关推荐
- C#泛谈 —— 变体(协变/逆变)
有如下四个类. public class Animal{}public class Mammal : Animal{}public class Dog : Mammal{public void Eat ...
- 12:设计模式、泛型、上下界、视图界定、上下文界定、协变逆变不变
经典的 WordCount 的讲解 示例代码如下: package com.atguigu.chapter14.homework.wordcount/*val lines = List("a ...
- 大数据技术之_16_Scala学习_12_设计模式+泛型、上下界、视图界定、上下文界定、协变逆变不变
大数据技术之_16_Scala学习_12 第十七章 设计模式 17.1 学习设计模式的必要性 17.2 掌握设计模式的层次 17.3 设计模式的介绍 17.4 设计模式的类型 17.5 简单工厂模式( ...
- 跟着小老弟来学习Kotlin中的逆变和协变
/ 今日科技快讯 / 近日,小米创始人.董事长兼CEO雷军在抖音上开启了其直播带货的首秀.从晚上8点开播,到晚上10点,销售额就已经破亿.包括1000台售价49999元的透明电视在内的商品一推 ...
- java中的逆变、协变、不变概念讲解转载自http://www.cnblogs.com/en-heng/p/5041124.html,感谢编程路上的前辈们!
En-Heng 无他,但手熟尔 博客园 首页 新随笔 联系 订阅 管理 随笔 - 32 文章 - 0 评论 - 33 Java中的逆变与协变 看下面一段代码 Number num = new In ...
- 协变逆变java_Java中的逆变与协变
什么是逆变与协变 协变(Covariance) 如果B是A的子类,并且F(B)也是F(A)的子类,那么F即为协变 逆变(Contravariance) 如果B是A的子类,并且F(B)成了F(A)的父类 ...
- 协变逆变java_Java中的协变与逆变
Java作为面向对象的典型语言,相比于C++而言,对类的继承和派生有着更简洁的设计(比如单根继承). 在继承派生的过程中,是符合Liskov替换原则(LSP)的.LSP总结起来,就一句话: 所有引用基 ...
- 泛型型协变逆变_Java泛型类型简介:协变和逆变
泛型型协变逆变 by Fabian Terh 由Fabian Terh Java泛型类型简介:协变和逆变 (An introduction to generic types in Java: cova ...
- 10天学会kotlin DAY7 接口 泛型 协变 逆变
kotlin 接口 泛型 协变 逆变 前言 1.接口的定义 2.抽象类 3.定义泛型类 4.泛型函数 5.泛型变换 6.泛型类型约束 7.vararg 关键字(动态参数) 8.[] 操作符 9.out ...
- UPS电源中的逆变电路与Simulink仿真
一.设计题目: UPS电源中的逆变电路 主要指标及要求: 输入电压240V 输出电压220/230/240V 效率>90% 二.设计思路.方案选择及电路工作原理: 采用单相全桥逆变电路,并使用双 ...
最新文章
- 我亲手调教的AI,竟然开始歧视我了!
- 工信部:今年将发放5G临时牌照,预计下半年5G手机投放市场
- 用Maven插件生成Mybatis代码/数据库
- getResources()方法
- 国内外包行业的现状分析
- 踩坑:VScode 集成 eslint 插件
- 微服务升级_SpringCloud Alibaba工作笔记0013---SpringCloud Alibaba简介
- 遗传算法MATLAB工具箱的下载与安装
- 解决路由环路问题的探讨
- winform 图片压缩大小为原图的一半_SCI论文图片编辑——常见十问十答
- 我遇到的JPA中事务回滚的问题
- 网络型多媒体计算机教室功能是,多媒体网络教室中的信息技术教学
- 请领导批阅文件怎么说_请领导批复文件怎么说
- 技术不牛如何才拿到国内IT巨头的Offer
- HUAWEI 机试题:VLAN资源池
- 电脑tdr太低是什么意思_SOLIDWORKS TDR 错误解决办法
- 通过爬虫获取第五人格游戏信息整理并分析(一)
- 来,带你实现基于网络通信QQ聊天室-----QQ有这么强!!!
- iOS远程推送原理及实现过程
- IDCE-CT系列蓄电池放电容量测试仪(蓄电池容量检测仪/放电仪)功能介绍