隐式转换函数是以implicit关键字声明的带有单个参数的函数。这种函数将会 自动应用 ,将值从一种类型转换为另一种类型。
object ImplicitDemo {
def main(args: Array[String]): Unit = {
implicit def f1(d: Double): Int = {
d.toInt
}
val n1: Int = 3.4 //=> val n1: Int = f1$1(3.4)
val n2: Int = 5.6
val n3: Int = 1.2
println(n1 + " " + n2 + " " + n3)
}
}
隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类型和返回值类型)有关。
隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别
如果需要为一个类增加一个方法,可以通过隐式转换来实现。(动态增加功能)比如想为MySQL类增加一个delete方法。
object ImplicitDemo02 {
def main(args: Array[String]): Unit = {
//隐式函数
implicit def addDelete(mySQL: MySQL): DB = {
new DB
}
//创建MySQL对象
val mySQL = new MySQL
mySQL.delete() //底层(编译器做的转换)是这样的: addDelete$1(mySQL).delete()
}
}
//类-insert
class MySQL {
def insert(): Unit = {
println("insert")
}
}
//类 DB-delete
class DB {
def delete(): Unit = {
println("delete...")
}
}