泛型:通俗的講,比如需要定義一個函數,函數的參數可以接受任意類型。我們不可能一一列舉所有的參數類型重載(overload)函數。
那麼程序引入了一個稱之爲泛型的東西,這個類型可以代表任意的數據類型。
例如List,在創建List時,可以傳入×××、字符串、浮點數等等任意類型。那是因爲List在類定義時引用了泛型。
List的定義
sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with Serializable
其中A就是類型,當然A你可以寫成任意的標識符。
泛型應用在類和函數中,代碼示例如下:
package com.dt.scala.type_parameterization //泛型類 F,S,T 是類型,後面引用該類型 class Triple[F,S,T](first: F,second: S,third: T) object Hello_type_parameterization { def main(args: Array[String]): Unit = { //創建一個對象,傳入參數類型爲 String、Int、Double val triple1 = new Triple("Spark",3,3.14) // 可見,定義時使用泛型,在調用時可以根據自己的需要傳入任何類型。 //也可以用如下方式創建對象 val triple2 = new Triple[String,String,String]("Spark","Scala","Kafka") //new 的時候,指定類型。那麼傳入的參數,必須是指定的類型 // 泛型函數 // 定義一個函數,可以獲取各類List的中間位置的值 def getData[T](l: List[T])={ l.take(l.length/2) } println(getData(List("a","b","c"))) println(getData(List(1,2,3,4,5,6))) } }