第42講:Scala中泛型類、泛型函數、泛型在Spark中的廣泛應用

泛型:通俗的講,比如需要定義一個函數,函數的參數可以接受任意類型。我們不可能一一列舉所有的參數類型重載(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)))
    
  }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章