隐式对象:implicit object xxx
package ce.scala.zhong
abstract class Template[T]{ //抽象类 T是泛型
def add(x : T, y : T) : T
}
abstract class SubTemplate[T] extends Template[T]{
def Unit : T
}
object Implicits_Object_64 {
def main(args: Array[String]) {
implicit object StringAdd extends SubTemplate[String]{
def add(x : String, y : String) : String = x concat y
def Unit : String = ""
}
implicit object IntAdd extends SubTemplate[Int]{
def add(x : Int, y : Int) : Int = x + y
def Unit : Int = 0
}
def sum[T](xs : List[T])(implicit m : SubTemplate[T]) : T = //柯里化 m是隐式参数
if(xs.isEmpty) m.Unit
else m.add(xs.head,sum(xs.tail)) //递归
println(sum(List(1,2,3)))
println(sum(List("scala", "spark", "hadoop")))
}
}
输出:
6
scalasparkhadoop