一、View Bounds代码实战
class Pair_NotPerfect[T <% Comparable[T]] (val first : T, val second :T){
def bigger = if(first.compareTo(second) > 0) first else second
}
object View_Bounds_44 {
def main(args: Array[String]): Unit = {
val pair = new Pair_NotPerfect("Spark", "Hadoop")
println(pair.bigger)
val pairInt = new Pair_NotPerfect(3,5)
//因为Int会隐式转换成RichInt,而RichInt实现了Comparable[Int],所以用视图界定就没问题
//因为Int不是Comparable[Int]的子类,若用<:这种,就会报错
println(pairInt.bigger)
}
}
输出:
Spark
5
//如果T能够被界定为Ordered[T]的话,那么就可以使用Ordered[T]的>或者< , 这样更符合数学中比较大小的逻辑
class Pair_Better[T <% Ordered[T]](val first : T, val second : T){
def bigger = if(first > second) first else second
}
object View_Bounds_44 {
def main(args: Array[String]): Unit = {
val pair_Better_String = new Pair_Better("scala", "java")
println(pair_Better_String.bigger)
val pair_Better_Int = new Pair_Better(2,9)
println(pair_Better_Int.bigger)
}
}
输出:
scala
9
二、View Bounds在Spark中的广泛应用
def rddToSequenceFileRDDFunctions[K <% Wirtable : ClassTag, V <% Writable:ClassTag] ...
参考资料来源于大数据梦工厂 深入浅出scala 第44讲 由王家林老师讲解