第61讲 scala 中隐式转换执行过程分析

Scala隐式转换解析

一、隐式转换概念

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. 功能增强

参考资料
1. 土豆网 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析

2. 百度云盘 第59讲:Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析

另外
欢迎广大Spark爱好者学习交流.也欢迎广大学习爱好者加入
DT大数据梦工厂交流群:462923555
DT大数据微信公众账号:DT_Spark

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值