您的位置:首页 > 其它

第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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: