本篇做为scala快速入门系列的第三十五篇博客,为你们带来的是关于泛型的内容。java
scala和Java同样,类和特质、方法均可以支持泛型。咱们在学习集合的时候,通常都会涉及到泛型。数组
那如何本身定义泛型呢?markdown
在scala中,使用方括号来定义类型参数。ide
语法函数
示例学习
参考代码测试
不考虑泛型的实现spa
加入泛型支持scala
scala的类也能够定义泛型。接下来,咱们来学习如何定义scala的泛型类。3d
语法
示例
需求:
咱们在定义方法/类的泛型时,限定必须从哪一个类继承、或者必须是哪一个类的父类。此时,就须要使用到上下界。
使用<:
类型名表示给类型添加一个上界,表示泛型参数必需要从该类(或自己)继承。
语法
示例
参数代码
上界是要求必须是某个类的子类,或者必须从某个类继承,而下界是必须是某个类的父类(或自己)
语法
[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的高阶函数,敬请期待٩(๑>◡<๑)۶