abstract class Template[T] {
def add(x: T, y: T): T
}
abstract class SubTemplate[T] extends Template[T] {
def unit: T
}
object Implicits_Object extends App{
implicit object StringAdd extends SubTemplate[String] {
def add(x: String, y: String) = x concat y
def unit: String = ""
}
implicit object IntAdd extends SubTemplate[Int] {
def add(x: Int, y: Int) = x + y
def unit: Int = 0
}
/**
* m是隐式对象,如果T是Int,则使用IntAdd这个隐式对象
* 如果T是String,则使用StringAdd这个隐式对象
*/
def sum[T](xs: List[T])(implicit m: SubTemplate[T]): T =
if (xs.isEmpty) m.unit
else m.add(xs.head, sum(xs.tail)) //tail:除了第一个元素的所有元素
println(sum(List(1, 2, 3)))
println(sum(List("a", "b", "c")))
}
scala进阶18-隐式对象
最新推荐文章于 2022-04-07 17:52:41 发布