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

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

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

    今天学业习了上下文界定的内容,看下这段代码 class Pair_Ordering[T:Ordering](val first : T,val second : T){  def bigger(imp ...

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

    今天学习了scala的界定,先来看看下面这段代码 //class Pair[T] (val first : T,val second : T)class Pair[T <: Comparable ...

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

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

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. 第47讲:Scala多重界定代码实战及其在Spark中的应用源码解析

    今天学习了scala的多重界定 T >: A <: B 表示T同时有下界和下界,下界为A,上界为B,A为B的子类型.下界必须写在前面,上界必须写在后面,位置不能颠倒. T<:A wi ...

  8. Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  9. Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

随机推荐

  1. 解决Windows8下Cisco Systems VPN Client的Reason 442: Failed to Enable Virtual Adapter错误

    Windows8下使用Cisco Systems VPN Client创建的Cisco IPSec VPN无法连接,提示Reason 442: Failed to Enable Virtual Ada ...

  2. EXCL poi导入

    public static void importExcel2(File file) throws Exception { InputStream is = new FileInputStream(f ...

  3. oracle 认证方式

    Oracle登录的时候有两种认证方式,一种是“操作系统认证”,一种是“口令文件认证”.1.当采取操作系统认证的时候,在本地用任何用户都可以以sysdba登陆:(默认方式)2.当采取口令文件认证的时候, ...

  4. Scala伴生类和伴生对象

    单例对象与类同名时,这个单例对象被称为这个类的伴生对象,而这个类被称为这个单例对象的伴生类.伴生类和伴生对象要在同一个源文件中定义,伴生对象和伴生类可以互相访问其私有成员.不与伴生类同名的单例对象称为 ...

  5. 样式link属性media用法--媒体类型查询

    引用外部样式使用link 你可能想针对将要显示页面的设备类型(桌面PC.笔记本电脑.平板电脑.手机或者甚至页面的印刷版本)来调整页面的样式,可以利用一个media属性, 在<link>元素 ...

  6. javascript-test1

    var AAA = function(name, age) { this.name = name ; this.age = age; } AAA.prototype.getName = functio ...

  7. Linux搭建smtp服务器+laravel5.2发邮件配置

    /** * 这里主要是想通过自己搭建smtp服务器,配置laravel5.2框架,实现邮箱发邮件功能, * 主要内容是搭建smtp服务器,laravel5.2发邮件顺手提一下 */ /** * 1.l ...

  8. codevs 1163 访问艺术馆

    1163 访问艺术馆  时间限制: 1 s  空间限制: 128000 KB       题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结 ...

  9. java-web乱码问题解决

    <一>乱码问题(设置tomcat uriencoding=’utf-8’); 统一设置编码过滤器 <1>get请求: request.setCharacterEncoding( ...

  10. Open Live Writer的配置

    --------siwuxie095 1.首先到官网下载OLW:http://openlivewriter.org/ 2.选择 Other services 3.填写"博客地址". ...