43.Scala中類型變量Bounds代碼實戰及其在Spark中的應用源碼解析

一、Scala中的類型變量Bounds代碼實戰

//上界
class Pair[T <: Comparable[T]] (val first : T, val second : T) {  //Comparable[T]是父類  
  //若對T不做限定,則不確定first這個類型是否有compareTo這個方法。
  //Comparable[T]是T的上界,T是Comparable[T]的下界

 def bigger = if(first.compareTo(second) > 0) first else second
}


//下界
class Pair_Lower_Bound[T] (val first:T, val second : T){
  
  def replaceFirst[R >: T] (newFirst : R) = new Pair_Lower_Bound[R](newFirst, second)  //R是父類,T是子類
  //從R的角度看:T是R的下界
  //從T的角度看:R是T的上界
  //例如:Person是Student的父類、上界,Student是Person的子類、下界。顯然可以用Person類型來代替Student類型。(面向接口編程)
 }

object Type_Variable_Bounds_43 {
  def main(args : Array[String]) {
     val pair = new Pair("Spark", "Hadoop")
     println(pair.bigger)
  }
}
輸出:Spark


二、類型變量Bounds在Spark中的廣泛應用

def hadoopFile[K, V](
      path: String,
      inputFormatClass: Class[_ <: InputFormat[K, V]],   ...
讀取hadoop文件的方法 ,用上界限定必須具有某些特徵


參考資料來源於大數據夢工廠 深入淺出scala 第43講 由王家林老師講解


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