今天学习了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学习内容