Scala隐式( implicit)编程彻底实战之编程进阶(7)

一:隐式详解

1:概念:
隐式(implicit)是Scala的一个强大特性,同时也是一个可能存在正义的特性。使用隐式能够减少代码,能够向已有类型中注入新的方法,也能够创建领域特定语言(DSL)。
隐式之所以产生争议,是因为除了通过Predef对象自动加载的哪些隐式对象外,其他在源码中出现的隐式对象均不是本地对象。隐式对象一旦进入作用域,编译器便能执行该隐式对象以生成方法参数或者将指定参数转化为预期类型。不过在阅读源码是,读者无法简单的指出什么时候会应用这些隐式值和隐式方法,可能给读者造成困惑。

2,举例说明

我们使用implicit关键字标记那些用户无需显示提供的方法参数。调用方法是,如果未输入隐式参数且代码所处作用域中存在类型兼容值时,类型兼容值会从作用域中调出,反之系统会报错。假设我们定义了一个作用于man 变 SuperMan的方法,在此举一个小例子来简单演示implicit的应用:

class Man (val name : String)
/*第一种方式
* object Man{
*   implicit def man2SuperMan(man:Man) = new SuperMan(man.name)
* }
* */
class SuperMan(val name:String){
  def makeMiracles = println(this.name+"WOW WOw,i am superman")
}

object IMFimplicits{
  implicit def man2SuperMan(man:Man) = new SuperMan(man.name)
}
object HelloImplicit {
  def main(args: Array[String]) {
    import com.dt.spark.sql.IMFimplicits._
    val man = new Man("Scala")
    man.makeMiracles
    //做默认的配置
    implicit  val content = "Dollar"
    //talk("java")("money")
    talk("java")
    talk("java")("spark")
  }
  def talk(name : String)(implicit content:String) = println(name+":"+content)
}

输出的结果为:

ScalaWOW WOw,i am superman
java:Dollar
java:spark

本博客内容根据大数据Spark “蘑菇云”行动前传第16课:Scala implicits编程彻底实战及Spark源码鉴赏
1 Spark源码Scala implicits的使用
2 Scala implicits实战
3 Scala implicits企业级最佳实践
内容进行总结的学习笔记

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值