Scala深入浅出进阶经典 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析
2015-09-25 00:03
561 查看
package com.dt.scalaInAction.demo_044 /*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 first: T, val second: T) { def bigger = if (first.compareTo(second) > 0) first else second } /** * Ordered视图界定 * 上面这种方式的12行first.compareTo(second) > 0 通过compareTo来比较 但是不能直观的像数学比较那样清晰 * Scala提供了Ordered视图界定 * Ordered在Comparable上提供一些关系型的操作符 < > <= >=等 */ class Pair_Batter[T <% Ordered[T]](val first: T, val second: T) { //这里的 > 是因为Ordered中提供的方法 def bigger = if (first > second) first else second } /** * Scala中View Bounds代码实战及其在Spark中的应用源码解析 */ object View_Bounds { def main(args: Array[String]): Unit = { var pair = new Pair_NotPerfect("Spark", "Hadoop") println(pair.bigger) //Spark /* * 当类型界定为Pair_NotPerfect[T <: Comparable[T]]报错 因为Int本身不是Comparable的子类 * * 当类型界定为视图界定时 Pair_NotPerfect[T <% Comparable[T]] 就可以正常运行 * 是因为Int本身不是Comparable的子类型 Scala通过"隐式转换"将Int转换成RichInt 而这个类型是Comparable的子类 */ var pairInt = new Pair_NotPerfect(3, 5) //Int -> RichInt println(pairInt.bigger) //5 /** * 注意:这样定义不是因为String的上界是Ordered[String] * 当使用视图界定时 会发生"隐式转换" 把String --> RichString * 而RichString是Ordered[RichString]的子类型 RichString中是实现了这样的 < > <= >=等方法 * 从而真正是让String类型完成视图界定 */ var pair_Batter_String = new Pair_Batter("Java", "Scala") println(pair_Batter_String.bigger) //Scala val pair_Batter_Int = new Pair_Batter(20, 12) println(pair_Batter_Int.bigger) //20 } }
以上内容是从王家林老师DT大数据课程第44讲的学习笔记和个人整理。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
第44讲视频网站地址:http://pan.baidu.com/s/1vz2cI
相关文章推荐
- 建立基于虚拟用户的VSftpd服务
- JSP学习之Java Web中的安全控制实例详解
- Java Web开发之访问路径问题分析
- Java Web开发之信息查询方式总结
- Python中正则表达式match()、search()函数及match()和search()的区别详解
- Python正则表达式操作指南
- ASP.NETWeb服务器验证控件如何使用
- ASP.NET预备知识学习笔记
- 分享3个php获取日历的函数
- PHP简单实现断点续传下载的方法
- php实现的Curl封装类Curl.class.php用法实例分析
- ThinkPHP进程计数类Process用法实例详解
- 如何解决PHP无法实现多线程的问题
- PHP中的Session对象如何使用
- 十个PHP高级应用技巧果断收藏
- PHP防盗链的基本思想 防盗链的设置方法
- PHP生成随机字符串(3种方法)
- 腾讯CMEM的PHP扩展编译安装方法
- ThinkPHP在Cli模式下使用模板引擎的方法
- ThinkPHP2.x防范XSS跨站攻击的方法