内容:
1、Scala中的类型变量Bounds代码实战
2、泛型变量Bounds在Spark中的应用
class Pair[T <: Comparable[T]](val first : T,val second : T){
def bigger = if(first.compareTo(second) > 0)first else second
}
class Pair_Lower_Bound[T](val first:T,val second:T){
def replaceFirst[R >: T](newFirst:R)= new Pair_Lower_Bound[R](newFirst,second)
}
object Typy_Variables_Bounds {
def main(args: Array[String]){
val pair = new Pair("Spark", "Hadoop")
println(pair.bigger)
}
}
上述代码中给泛型类Pair中的类型T一个限定,即类型为T的成员有一个方法为CompareTo,如注释掉的代码会报错,因为不知道first和second的具体类型,无法判定first和second是否有CompareTo,那么就需要对T有一个限定(对变量类型本身的限定)。具体限定为[T<:Comparable[T]],即T类型为Comparable的子类型(如:compareTo),比较的实现为函数bigger。Class replaceFirst[R:>T]说明R类型为T的父类,Pair[T:<ComparableTo[T]]说明T类型为ComparableTo[T]的下界。