59.Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析

隐式转换的目的:增强类库功能
在spark或者play框架中,到处可见。
增强类库的方式:
在Java或者C#中,用工具类或者继承

在Scala中,用隐式转换或者隐式参数。

import java.io.File
import scala.io.Source

class RichFile(val file : File){  //RichFile是增强的类。比如1 to 3  1是Int,但是隐式转换成RichInt,RichInt里才有to()方法
  def read = Source.fromFile(file.getPath()).mkString
}

object Context{
  implicit def file2RichFile(file : File) = new RichFile(file)  //把已有类型转换成增强的类型。注意方法的命名file2RichFile 原来类型2转换后的类型
}

object Hello_Implicit_Conversions_59 {
  def main(args: Array[String]): Unit = {
      import Context.file2RichFile
      println(new File("E:\\big.txt").read)  //File中没有read方法,编译器在报错之前会最后一次尝试检查,看看在其作用域里有无隐式转换。在这里就是在main()里查看
  }
}


若当前作用域没有隐式转换,会找源目标类型的伴生对象。

比如在Spark中,SparkConetxt中若没有找到隐式转换,就会在RDD.scala中找,其中有很多方法,包括rddToPairFunction,rddToAsyncRDDActions,rddToSequenceFileRDDFunctions




隐式参数:
运用了隐式转换的技术,隐式参数一般发生在函数调用的时候,调用者会通过隐式参数告诉被调用的函数更多的关于类型和上下文的信息。


参考资料来源于大数据梦工厂 深入浅出scala 第59讲 由王家林老师讲解



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值