[Scala]學習筆記五——隱式轉換
阿新 • • 發佈:2018-11-12
隱式轉換:為一個已經存在的東西,新增一個功能需求(比如:為一個已經存在的類新增一個新的方法)
滿足上述需求,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") } }
還有隱式引數和隱式類,都不建議使用,原始碼中看到後再來補充吧……