本篇作为scala快速入门系列的第三十五篇博客,为大家带来的是关于泛型的内容。
scala和Java一样,类和特质、方法都可以支持泛型。我们在学习集合的时候,一般都会涉及到泛型。
那如何自己定义泛型呢?
在scala中,使用方括号来定义类型参数。
语法
示例
参考代码
不考虑泛型的实现
加入泛型支持
scala的类也可以定义泛型。接下来,我们来学习如何定义scala的泛型类。
语法
示例
需求:
我们在定义方法/类的泛型时,限定必须从哪个类继承、或者必须是哪个类的父类。此时,就需要使用到上下界。
使用<:
类型名表示给类型添加一个上界,表示泛型参数必须要从该类(或本身)继承。
语法
示例
参数代码
上界是要求必须是某个类的子类,或者必须从某个类继承,而下界是必须是某个类的父类(或本身)
语法
[NOTE]
示例
参考代码1
参考代码2
object _04GenericType {
// 1. 定义类和子类
class Person
class Policeman extends Person
class Superman extends Policeman
// 2. 定义泛型方法,指定泛型的类型上下界
def demo[T >: Policeman <: Person](array: Array[T])={
println(array)
}
// 3. 调用demo方法,传入不同类型的数据进行测试
def main(args: Array[String]): Unit = {
demo(Array(new Person))
demo(Array(new Policeman))
// 编译报错:String类型并不是Person类型或者是它的子类
// demo(Array(new Superman))
}
}
spark的源代码中大量使用到了协变、逆变、非变,学习该知识点对我们将来阅读spark源代码很有帮助。
来看一个类型转换的问题:
如何让带有泛型的类支持类型转换呢?
语法
语法
语法
示例
参考代码
本期的内容分享就到这里了,喜欢的小伙伴们记得点个赞,持续关注哟~下期为大家介绍的是scala的高阶函数,敬请期待٩(๑>◡<๑)۶