第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析

时间:2022-05-04 12:45:50

今天学习了scala的界定,先来看看下面这段代码

//class Pair[T] (val first : T,val second : T)
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_Variable_Bounds {
 
  def main(args:Array[String]){
    val pair = new Pair("Spark","Hadoop")
    println(pair.bigger)
  }
}

首先看看Pair类的定义。它的类型是[T <: Comparable[T]],它的意思是,如果T的类型的对像,能够进行Compare方法的比较,既类型中定义了Compare方法,那么它的类型就是可比较类型 ,即Comparable[T]。而 <: 的意思就是,T是Comparable[T]的子类。这种情况,称Comparable[T]是T的上界。

通过定义我们可知,T是可以比较的,那么,通过main函数里定义的pair就可以使用bigger方法,打印出Spark

再回到类型界定,看下 Pair_Lower_Bound类里的replaceFirst方法定义,这里很巧妙的使用了上界,即R是T的上界,那么当使用R替换first的时候,生成的新对像,就是R类型的,因为T是R的子类型,是R的下界。

分享下更多的scala资源吧:

百度云盘:http://pan.baidu.com/s/1gd7133t

微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416

360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

关注微信账号,获取更多关于scala学习内容