scala的隐式转换,允许手动指定将某种类型的对象转换成其它类型的对象。
1.隐式转换
Scala的隐式转换,允许手动指定将某种类型的对象转换成其它类型的对象。 Scala的隐式转换,最核心的就是定义隐式转换函数,即implicit conversion function 隐式转换函数与普通函数唯一的语法区别是要以implicit开头而且最好要定义函数返回类型。
隐式转换非常强大的一个功能,就是可以在不知不觉中加强现有类型的功能。也就是说,我们可以为某个普通类定义一个加强类,并定义对应的隐式转换函数,这样我们在使用加强类里面的方法的时候,Scala会自动进行隐式转换,把普通类转换为加强类,然后再调用加强类中的方法
Scala默认会自动使用两种隐式转换 1:源类型,或者目标类型的伴生对象里面的隐式转换函数 2:当前程序作用域内可以用唯一标识符表示的隐式转换函数
如果隐式转换函数不在上述两种情况下的话,那么就必须手动使用import引入对应的隐式转换函数
通常建议,仅仅在需要进行隐式转换的地方,比如某个函数内,用import导入隐式转换函数,这样可以缩小隐式转换函数的作用域,避免不需要的隐式转换。
2.隐式转换案例
案例:狗也能抓老鼠,通过隐式转换实现,狗也具备猫抓老鼠的功能。
package com.simoniu
class Cat(val name: String){
def catchMouse(){println(name+" catch mouse")}
}
class Dog(val name: String)
object ImplicitDemo {
implicit def object2Cat(obj: Object): Cat = {
if (obj.getClass == classOf[Dog]) {
val dog = obj.asInstanceOf[Dog]
new Cat(dog.name)
}
else null
}
def main(args: Array[String]): Unit = {
val c = new Cat("汤姆");
c.catchMouse();
val d = new Dog("旺财")
d.catchMouse()
}
}
运行结果:
汤姆 catch mouse
旺财 catch mouse