泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。scala也采用了Java的泛型擦除模式(erasure),即类型是编译期的,在运行时会被"擦除"的,即运行时看不到类型参数。
package com.test
import scala.collection.immutable.Queue
//对应的3个参数的类型为Triple类中的参数化类型F、S、T
class Triple[F,S,T](val first:F,val second:S,val third:T)
object Test {
def main(args: Array[String]): Unit = {
//两种类型参数列表构建Triple类的实例
//scala支持类型推断,可以推断出各参数的类型,推断出对应的F为String类型、S为Int类型、T为Double类型
val triple = new Triple("Spark",3,3.1415)
//明确指定Triple类的3个参数化类型
val bigData = new Triple[String,String,Char]("Spark","Hadoop",'R')
//定义了一个泛型参数T的getData方法
def getData[T](list:List[T]) = list(list.length / 2)
println(getData(List("Spark","Hadoop",'R')))
//定义对应的偏应用函数,即部分参数未指定
val f = getData[Int] _
println(f(List(1,2,3,4,5,6)))
//使用Scala类库的泛型集合类Queue来演示泛型的相关操作
val queue = Queue(1,2,3,4,5)
val queue_append = queue enqueue 6
println("queue:" + queue + "\n" + "queue_append:" + queue_append)
}
}