Scala(隱式轉換)-第七天
1、隱式轉換概述
需求:為一個已存在的類新增一個新的方法
java:動態代理
scala:隱式轉換
2、隱式轉換實戰
main{
//定義隱式轉換函式即可
implicit def man2superman(man:Man):Superman = new Superman(man)
val man = new Man("Messi")
man.fly()
implicit def file2RichFile(file:File):RichFile = new RichFile(file)
val file = new File("")
val txt = file.read()
println(txt)
}
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...")
}
}
class RichFile(cal file:File){
def read()={
scala.io.Source.fromFile(file.getPaht).mkString
}
}
3、隱式引數
指的是在函式或者方法中,定義一個用implicit修飾的引數,此時Scala會嘗試找到一個指定型別的,用implicit修飾的物件,即隱式值,並注入引數
main{
場景一:
testParam() //編譯不報錯,執行報錯
testParam("zhangsan") //可以執行
場景二:
implicit val name = "implicit_name"
testParam() //此時沒有問題 implicit_name
testParam("zhangsan") //zhangsan
場景三:
implicit val s1 = "s1"
implicit val s2 = "s2"
testParam //Error: ambiguous imolicit values
def testParam(implicit name:String):Unit = {
println(name+"~~~~~~~~")
}
}
注意:方法,類,伴生類等中只要能找到都可以,
4、隱式類
就是對類增加implicit限定的類,其作用主要是對類的加強!
object ImplicitClass extends App{
implicit class Calculator(x:Int){
def add(a:Int)=a+x
}
println(12.add(3)) //成功
println("12".add(3)) //失敗
}