一、隐式转换概念
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