-
Scala类型参数与Java的泛型参数的概念一致
-
泛型类
(1) 定义:在类名的后面跟上类型参数列表,用[]包裹
(2) 案例
(3) Scala可以根据第一字段类型自动推断泛型类型
-
泛型参数
(1) 定义:在方法名后跟上类型参数列表,用[]包裹
(2) 案例
(3) 泛型函数一样可以自动推断类型
-
上边界Bounds
(1) 类似Java的<T extends xxx>,即泛型类型必须是xxx及其子类
(2) 定义形式:[T <: xxx]
(3) 案例
-
下边界Bounds
(1) 类似Java的<T super xxx>,即泛型类型必须是xxx及其超类
(2) 定义形式: [T >: xxx] -
View bounds
(1) 上下界Bounds的加强版,支持对类型进行隐式转换。将特定的类型进行隐式转换后,再判断是否在边界指定类型范围内
(2) 定义形式:隐式转换函数+[T <% xxx]
(3) 案例
-
Context Bounds
(1) 特殊Bounds,需要使用上下文中的隐式值以及注入
(2) 定义形式:[T:类型],且必须存在一个“类型[T]”的隐式值
(3)案例
-
Manifest Context Bounds
(1) Scala中,如果要实例化一个泛型数组,就必须使用Manifest Context Bounds(2) 定义形式:若数组元素类型为T的话,则需要为类或函数定义[T:Manifest]泛型类型,才能实例化Array[T]这种泛型数组
(3) 案例
-
泛型的协变和逆变
(1) 引例:在Java中,如果有Professional是Master的子类,Card<Professional>却不是Card<Master>的子类(2) 定义形式
<1> 协变:A[+T],表示A[T]的继承结构与T的继承结构顺序一致,向下多态
<2> 逆变:A[-T],表示A[T]的继承结构与T的继承结构相反,向上推出,父子状态交换(3) 案例
-
Existential Type
(1) Spark中最为常见
(2) 相当于Java的泛型通配符 “?”
[笔记迁移][Spark开发语言][Scala][10]面向对象——类型参数
版权声明:Collected by Bro_Rabbit only for study https://blog.csdn.net/weixin_38240095/article/details/84134770
猜你喜欢
转载自blog.csdn.net/weixin_38240095/article/details/84134770
今日推荐
周排行