一文详解scala泛型及类型限定

640?wx_fmt=png

今天知识星球球友,微信问浪尖了一个spark源码阅读中的类型限定问题。这个在spark源码不少处出现,因此今天浪尖就整理一下scala类型限定的内容。但愿对你们有帮助。html

640?wx_fmt=png

 

640?wx_fmt=pngscala类型参数要点数组

1. 非变微信

trait Queue[T] {}?
这是非变状况。这种状况下,当类型S是类型A的子类型,则Queue[S]不可认为是Queue[A]的子类型或父类型,这种状况是和Java同样的。?
2. 协变
trait Queue[+T] {}?
这是协变状况。这种状况下,当类型S是类型A的子类型,则Queue[S]也能够认为是Queue[A}的子类型,即Queue[S]能够泛化为Queue[A]。也就是被参数化类型的泛化方向与参数类型的方向是一致的,因此称为协变。?
3. 逆变
trait Queue[-T] {}?
这是逆变状况。这种状况下,当类型S是类型A的子类型,则Queue[A]反过来能够认为是Queue[S}的子类型。也就是被参数化类型的泛化方向与参数类型的方向是相反的,因此称为逆变。?网络

4. 类型下界函数

U >: T大数据

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

5. 类型上届.net

S <: Tscala

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

640?wx_fmt=png泛型与约束实战

1?泛型函数

ClassTag[T]保存了泛型擦除后的原始类型T,提供给被运行时的。

 

 

2?类型变量界定

泛型参数类型限定,限定具体类的能够调用特定的方法。

 

 

3?泛型视图限定

泛型视图限定:表示把传入不是Comparable[T]类型的隐式传换为Comparable[T]类型,Comparable[T]:为T下界,T:为Comparable[T]上界。

 

 

4?上下文界定

上下文界定:上下文界定是隐式参数的语法糖。如:Ordering:能够进行隐式转化的T类型。

 

 

Manifest关键字:数组在声明时必需要求指定具体的类型,在函数泛型是没法知道具体类型,英语词性经过Manifest关键字使得运行时能够根据这个Manifest参数作更多的事情。

 

 

6?ClassTag关键字

ClassTag[T]保存了泛型擦除后的原始类型T,提供给被运行时的。

 

 

在引入Manifest的时候,还引入了一个更弱一点的ClassManifest,所谓的弱是指类型信息不如Manifest那么完整。用TypeTag替代了Manifest,用ClassTag替代了ClassManifest,缘由是在路径依赖类型中,Manifest存在问题。

 

 

 

 

 

 

更多scala,spark,大数据知识,但愿扩展视野解决疑难杂症及困惑,欢迎点击阅读原文,加入浪尖知识星球。

本文整理自网络,如有侵权,请联系微信158570986删除。

推荐阅读:

Scala语法基础之隐式转换

Scala语言基础之结合demo和spark讲实现链式计算

640?wx_fmt=png


文章来源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81916961

相关文章
相关标签/搜索