一、Context Bounds代码 实战
class Pair_Ordering[T : Ordering] (val first : T, val second : T){ //T是泛型/类型, Ordering是泛型类/泛型接口
def bigger(implicit ordered : Ordering[T]) = { //ordered是隐式值,可以认为我们并没有给bigger传进一个值,但因为存在隐式值,所以隐式值会自动传进来
if(ordered.compare(first, second) > 0) first else second
}
}
object Context_Bounds_45 {
def main(args: Array[String]): Unit = {
val pair = new Pair_Ordering("Spark", "Hadoop")
println(pair.bigger) //会隐式传入隐式值
val pairInt = new Pair_Ordering(3,5)
println(pairInt.bigger)
}
}
输出:
Spark
5
Ordering源码:
trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable {
outer =>
def tryCompare(x: T, y: T) = Some(compare(x, y))
def compare(x: T, y: T): Int
二、Context Bounds在Spark中的广泛应用
参考资料来源于大数据梦工厂 深入浅出scala 第45讲 由王家林老师讲解