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讲 由王家林老师讲解