A =:= B //表示A類型等同於B類型
A <:< B //表示A類型是B類型的子類型
def main(args: Array[String]): Unit = {
def rocky[T](i : T)(implicit ev : T <:< java.io.Serializable) { //傳入隱式參數,規定T必須是Serializable的子類型
println("Life is short, you need Spark!")
}
rocky("Spark") //運行時,推斷出“Spark”是String類型的,傳入隱式參數,發現T,String是Serializable類型的
// rocky(100) //報錯,Can not prove that Int <:< java.io.Serializable. 這就實現了對傳入的參數類型的限定
}
}
源碼:
sealed abstract class <:<[-From, +To] extends (From => To) with Serializable
private[this] final val singleton_<:< = new <:<[Any,Any] { def apply(x: Any): Any = x }
參考資料來源於大數據夢工廠 深入淺出scala 第48講 由王家林老師講解