← 返回首页
Scala隐式转换
发表时间:2023-09-10 11:23:59
Scala隐式转换

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