第65讲scala 中的隐式对象分析

信息来源于 DT大数据梦工厂微信公众号:DT_Spark

一、what is 隐式对象

所谓隐式对象 : 就是用 implicit object 定义的对象,其作用主要表现在 运行时 被调用
如:

   implicit object  StringAdd extends SubTemplate[String]{
      override def add(x: String, y: String): String = x+y
      override def unit: String = ""
    }

StringAdd 前面的 implicit object

二、when 使用 隐式对象

对于一些根据类型推断的计算,形如: + {利息} = 全价,或者是一些 表达式语句的计算,如${净价 + 利息}等,更加复杂一点的是, 计算数据的类型不同的场景

三、how 使用隐式对象

/**
 *  隐式对象
 * Created by zhiwang on 2015/7/23.
 */
abstract class Template[T]{
  def add(x:T,y:T):T
}

abstract class SubTemplate[T] extends Template[T]{
  def unit:T
}
object Implicit_Object {
  def main(args: Array[String]) {
    implicit object StringAdd extends SubTemplate[String]{
      override def add(x: String, y: String): String = x+y
      override def unit: String = ""
    }

    implicit val  wrongInt = new SubTemplate[Int]{
      override def unit: Int = -1
      override def add(x: Int, y: Int): Int = x+ y
    }

    implicit object IntAdd extends SubTemplate[Int]{
      override def unit: Int = 0
      override def add(x: Int, y: Int): Int = x+ y
    }
  def sum[T](xs:List[T])(implicit m: SubTemplate[T]) : T =
      if(xs.isEmpty) m.unit else m.add(xs.head,sum(xs.tail))

    println(sum(List(1,2,3,4,5)))
  }
}

四、过程解析

执行过程检查当前作用是否有 implicit object 限定的 类型为 SubTemplate 的对象,如有,则选取此对象。

此部分内容,结合 泛型,威力无穷,学习中。

参考资料
DT大数据微信公众账号:DT_Spark

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值