我們先看一下變量界定的代碼
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) } }
如果我們要傳入的參數是整數,編譯器會報錯
說明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) } }