第44講:Scala中View Bounds代碼實戰及其在Spark中的應用源碼解析

我們先看一下變量界定的代碼

package com.dt.scala.type_parameterization

class Pair_NoPerfect[T <: Comparable[T]](first: T,second:T){ 
  def bigger ={
    if (first.compareTo(second)>=0) first else second 
  }
}

object View_Bounds {
    def main(args: Array[String]): Unit = {
    val pair = new Pair_NoPerfect("Spark","Hadoop")
    println(pair.bigger)
    }
}

如果我們要傳入的參數是整數,編譯器會報錯

wKioL1bBiYmQXEXXAAAR9dYl23s419.png

說明Int不是Comparable的子類。但是Int可以通過隱式轉換轉成RichInt ,它是Comparable子類。

那麼我們可以使用視圖界定(view bound)來實現

package com.dt.scala.type_parameterization

class Pair_NoPerfect[T <: Comparable[T]](first: T,second:T){ 
  def bigger ={
    if (first.compareTo(second)>=0) first else second 
  }
}
// 將變量界定符號中的:換成% ,那麼就變成了視圖界定  <% 
class Pair_Better[T <% Comparable[T]](first: T,second:T){ 
  def bigger ={
    if (first.compareTo(second)>=0) first else second 
  }
}
object View_Bounds {
    def main(args: Array[String]): Unit = {
       val pair = new Pair_Better(1,2) // 隱式轉換 Int -> RichInt 
       println(pair.bigger)
    }
}


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