第61讲 scala 中隐式转换执行过程分析
2015-07-21 00:59
337 查看
一、隐式转换概念
java 有很庞大的类库资源,但是 被声明成 final 的类不允许继承 例如 String , 怎样扩展java及第三方类库 scala提供了很灵活的方式当 scala 使用 implicit 隐式转化时 , scala 编辑器发现对象的类型不匹配时,不会直接报错,而会在代码中尝试匹配implicit声明的object, 当然,相同方法签名的类必须唯一。
举个小例子,实现在字符串前后 添加 “**” 的操作。如:
import java.io.File import scala.io.Source /** * 隐式转换 * Created by zhiwang on 2015/7/21. */ class RichFile(val file:File){ def read() = Source.fromFile(file.getPath()).mkString } object Context{ implicit def file2RichFile(file:File) = new RichFile(file) } object hello_implicit_convertion{ def main(args: Array[String]) { import Context.file2RichFile println( new File("I:\\aa.txt").read()) } }
代码的执行过程如下:
1. 调用File 的read 方法
2. 当编译器发现File类没有read 方法时,不是直接报错,而是执行第三步
3. 检查当前作用域中是否有接受File的 implicit 方法,如没有直接报错,如有,执行第4步
4. 将File作为参数实例化RichFile,再检查是否有read 方法,如没有直接报错
5. 执行read方法
整个执行过程中,需要特别注意的是, 作用域
二、隐式转换的作用
功能增强参考资料
1. 土豆网 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析
2. 百度云盘 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析
另外
欢迎广大Spark爱好者学习交流.也欢迎广大学习爱好者加入
DT大数据梦工厂交流群:462923555
DT大数据微信公众账号:DT_Spark
相关文章推荐
- tinyint类型转换到varchar
- POJ 2104 K-th Number(划分树)
- 从内核文件系统看文件读写过程
- maven之 nexus服务器的搭建
- 你必须知道的指针基础-6.内存的初始化及结构体的使用
- iOS开发-使用storyboard实现UILabel的自适应高度(iOS8)
- 认真分析mmap:是什么 为什么 怎么用
- DiskPart 应用
- 基姆拉尔森计算公式
- 黑马程序员--面向对象之封装
- 网络IO之阻塞、非阻塞、同步、异步总结
- 《IOS编程》深入学习:键值编码 学习手记
- 贴图、图集的处理
- 算法导论 第二十五章:每对顶点间的最短路径
- T-SQL 查找重复记录
- Go语言开发环境配置
- uva 12235(dp)
- ZOJ 3793 First Digit(数学)
- OpenGL(一) 使用Win API 建立黑色窗口
- oj水题