信息来源于 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