1. 程式人生 > >[Scala]學習筆記五——隱式轉換

[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")
  }
}

還有隱式引數和隱式類,都不建議使用,原始碼中看到後再來補充吧……