[Scala]学习笔记五——隐式转换

隐式转换:为一个已经存在的东西,添加一个功能需求(比如:为一个已经存在的类添加一个新的方法)
满足上述需求,Java使用的是动态管理,Scala使用的是隐式转换

一个例子

//定义了两个类Man和Superman,现在的需求是Man的对象也可以拥有fly()方法

object ImplicitApp extends App {
  val man=new Man("Nina")
  //定义隐士转换的函数 必须要先用implicit声明这个函数
  implicit def man2superman(man:Man):Superman={
    new Superman(man.name)
  }
  //定义完隐士转换函数后,man可以fly了
  man.fly;
}

class Man(val name:String){
  def eat: Unit ={
    println(s"man $name eat")
  }
}

class Superman(val name:String){
  def fly: Unit ={
    println(s"superman $name fly")
  }
}

结果:
superman Nina fly

隐式转换切面封装:隐式转换的定义函数都写在一个类中,要使用的时候import一下
如上面的例子:先新定义一个切面,引用的时候要import一下

//隐式转换的函数都放在这个类中
object ImplicitAspect {
  //定义隐士转换的函数 必须要先用implicit声明这个函数
  implicit def man2superman(man:Man):Superman={
    new Superman(man.name)
  }
}
import ImplicitAspect._		//把切面import进来
object ImplicitApp extends App {
  val man=new Man("Nina")
  //定义完隐士转换函数后,man可以fly了
  man.fly
}
class Man(val name:String){
  def eat: Unit ={
    println(s"man $name eat")
  }
}
class Superman(val name:String){
  def fly: Unit ={
    println(s"superman $name fly")
  }
}

还有隐式参数和隐式类,都不建议使用,源码中看到后再来补充吧……

猜你喜欢

转载自blog.csdn.net/qq_41618373/article/details/83862880