第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析

今天学习了view bounds的内容,来看下面的代码。

//class Pair[T <: Comparable[T]](val first : T,val second : T){
//  def bigger = if(first.compareTo(second) > 0) first else second
//}

class Pair_NotPerfect[T <% Comparable[T]](val first : T,val second : T){
  def bigger = if(first.compareTo(second) > 0) first else second
}

class Pair_Better[T <% Ordered[T]](val first : T,val second : T){
  def bigger = if(first  > second) first else second
}

object View_Bounds {
 
  def main(args:Array[String]){
    val pair = new Pair_NotPerfect("Spark","Hadoop")
    println(pair.bigger)
   
    val pairInt = new Pair_NotPerfect(3,5)//Int => RichInt
    println(pairInt.bigger)
   
    val pair_Better_String = new Pair_Better("java","scala")//String => RichString
    println(pair_Better_String.bigger)
   
    val pair_Better_Int = new Pair_Better(20,12)
    println(pair_Better_Int.bigger)
   
  
  }
}

昨天学习了界定,但是,如果用昨天界定的代码中的类pair来处理Int型的数字的话,会报错,原因是int不是comparable的类型。这时,我们就用到了另外一种方法:视图界定。

class Pair_NotPerfect[T <% Comparable[T]](val first : T,val second : T){
  def bigger = if(first.compareTo(second) > 0) first else second
}

可以看出,它将<:变成了<%,这样做的结果就是,当遇到int类型这样的没有comparable方法的类型的数据的时候,可以隐式转换为带有comparable方法的类型。如,可以将int转换为RichInt。

val pairInt = new Pair_NotPerfect(3,5)//Int => RichInt
    println(pairInt.bigger)

这样一来,可就以使用comparable的方法了。可是,这样还不是很完美。我们在使用中喜欢使用带有直接比较的运算,比如a > b,说是,下面的类就出现了,它是Comparable[T]的升级版本。

class Pair_Better[T <% Ordered[T]](val first : T,val second : T){
  def bigger = if(first  > second) first else second
}

Ordered[T],它带有直接的比较方法,如>,<,=等。这样一来,我们就可以在代码中直接使用此方法进行比较。

val pair_Better_String = new Pair_Better("java","scala")//String => RichString
    println(pair_Better_String.bigger)

分享下更多的scala资源吧:

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

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

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

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

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

时间: 2024-10-12 20:36:26

第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析的相关文章

Scala中View Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-35

package com.leegh.parameterization /** * @author Guohui Li */class Pair_NotPerfect[T <% Comparable[T]](val first: T, val second: T) { def bigger = if (first.compareTo(second) > 0) first else second} //class Pair_NotPerfect[T <: Comparable[T]](val

第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析

今天学业习了上下文界定的内容,看下这段代码 class Pair_Ordering[T:Ordering](val first : T,val second : T){  def bigger(implicit ordered:Ordering[T]) = {    if(ordered.compare(first, second) > 0) first else second  }} object Context_Bounds {    def main(args:Array[String])

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

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

Scala中Context Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-36

package com.leegh.parameterization /** * @author Guohui Li */ class Pair_Ordering[T: Ordering](val first: T, val second: T) { def bigger(implicit ordered: Ordering[T]) = { if (ordered.compare(first, second) > 0) first else second }} object Context_Bo

Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-34

package com.leegh.parameterization /** * @author Guohui Li */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

Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/5uuKOP38d6s/优酷:http://v.youku.com/v_show/id_

Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

Scala 深入浅出实战经典 第47讲:Scala多重界定代码实战及其在Spark中的应用

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

Scala 深入浅出实战经典 第44讲: scala中view bounds代码实例

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③