通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码。
1.将方法或变量标记为implicit
def main(args: Array[String]): Unit = {
func(1)
}
def func(mes: String): Unit = {
println(mes)
}
implicit def intToString(num: Int): String = {
String.valueOf(num)
}
2.将方法的参数列表标记为implicit
implicit val p = "mobin"
people
def people(implicit peo: String): Unit = {
println(peo)
}
将p变量标记为implicit,所以编译器会在方法省略隐式参数的情况下去搜索作用域内的隐式值作为缺少参数。
3.将类标记为implicit
转换时机
1.当方法中的参数的类型与目标类型不一致时
2.当对象调用类中不存在的方法或成员时,编译器会自动将对象进行隐式转换
转换前提
1.不存在二义性
2.隐式操作不能嵌套使用,即一次编译只隐式转换一次(One-at-a-time Rule)
Scala不会把 x + y 转换成 convert1(convert2(x)) + y
3.代码能够在不使用隐式转换的前提下能编译通过,就不会进行隐式转换。