1.隱式轉換
隱式轉換是一項強大的程序語言功能,它不僅能夠簡化程序設計,也能夠使程序具有很強的靈活性。
隱式函數的名稱對結構沒有影響.函數可以是任何名字,只看參數與返回,也就是看能不能把傳入的參數變成需要的類型就行了。
隱式轉換可以定義在目標文件當中,即隱式轉換函數與目標代碼在同一個文件當中,
也可以將隱式轉換集中放置在某個包中,在使用時直接將該包引入即可,後者更常見。
隱式轉換髮生的時間:
1.當方法中參數的類型與實際類型不一致時
2.當調用類中不存在的方法或成員時,會自動將對象進行隱式轉換
2.隱式參數
在一般的函數據定義過程中,需要明確傳入函數的參數,如果給函數定義隱式參數的話,則在使用時可以不帶參數.
3.蘑菇雲代碼
package com.dtspark.scala.basics
/**
* 人是如何變成超人的!
*/
/**
*這是一個人。
*/
class Man(val name: String)
/*object Man{
implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}*/
/**
*這是一個超人,看他們之間是沒有任何關係的
*/
class SuperMan(val name: String){
//超人有超能力。
def Superpowers = println("Wow,wow,wow," + this.name +" get a super natural power, will save the world now!!")
}
/**
* 這是變身的條件
*/
object implicts{
implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}
object HelloImplicits {
def main(args: Array[String]): Unit = {
println("=======隱式轉換=========")
import com.dtspark.scala.basics.implicts._
//創建一個人出來
val man = new Man("王大錘")
//沒有引入import com.dtspark.scala.basics.implicts._時這個人是不能使用超能力的。
//所謂隱式轉換就是把一個對象轉換成另一個對象的過程,目的是調用另一個對象的方法
man.Superpowers
println("=======隱式參數=========")
implicit val content = "Dollar"
//talk要傳入兩個參數,第二個是隱式的,它會自己去找一個隱式的變量。
//implicit val contentA = "wangdada"如果我這裏再定義一個滿足String要求的隱式變量,會找不到而報錯。
//隱式參數只看參數類型不管參數名稱
//mplicit val contentB = "gao"
talk("Scala")
}
def talk(name: String)(implicit content:String) = println(name + " : " +content)
}
以上內容來自[DT大數據夢工廠]首席專家Spark專家王家林老師的課程分享。感謝王老師的分享,更多精彩內容請掃描關注[DT大數據夢工廠]微信公衆號DT_Spark