您的位置:首页 > 编程语言

48.Scala类型约束代码实战及其在Spark中的应用源码解析

2017-09-25 22:17 330 查看
   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讲 由王家林老师讲解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐