第28課:Scala隱式轉(zhuǎn)換內(nèi)幕實踐解密

其實隱式轉(zhuǎn)換有幾種類型:隱式參數(shù),隱式轉(zhuǎn)換嗤栓,隱式對象,和隱式類

首先看一下Scala的作用域

隱式參數(shù)沖突的情況:

object Implicits {
  implicit val content="Scala"
}

object ImplicitsMsg {
  implicit val content="ScalaMsg"
}

object ImplicitAdance extends App {

  def printContent(implicit content:String)=println(content)
//  implicit val msg="Spark" //有兩個隱式參數(shù)的時候箍邮,就會出現(xiàn)沖突
  import Implicits.content //當(dāng)你導(dǎo)入一個類的時候茉帅,連伴生對象的成員也會導(dǎo)入進(jìn)來,
  //當(dāng)明確指定需要導(dǎo)入哪個屬性的時候,優(yōu)先級會更高(當(dāng)然不是隱式參數(shù)的情況)
  import ImplicitsMsg._
  printContent

}

非隱式參數(shù)不沖突锭弊,明確指定的導(dǎo)入方式優(yōu)先級更高

object Implicits {
  val content="Scala"
}

object ImplicitsMsg {
  val content="ScalaMsg"
}

object ImplicitAdance extends App {

  def printContent(implicit content:String)=println(content)
//  implicit val msg="Spark" //有兩個隱式參數(shù)的時候堪澎,就會出現(xiàn)沖突
  import Implicits.content //當(dāng)你導(dǎo)入一個類的時候,連伴生對象的成員也會導(dǎo)入進(jìn)來,
  //當(dāng)明確指定需要導(dǎo)入哪個屬性的時候味滞,優(yōu)先級會更高(當(dāng)然不是隱式參數(shù)的情況)
  import ImplicitsMsg._
  printContent(content)

}

當(dāng)然樱蛤,當(dāng)前作用域的優(yōu)先級還是最高的:

object Implicits {
  val content="Scala"
}

object ImplicitsMsg {
  val content="ScalaMsg"
}

object ImplicitAdance extends App {

  def printContent(implicit content:String)=println(content)
  val content="Spark" //有兩個隱式參數(shù)的時候,就會出現(xiàn)沖突
  import Implicits.content //當(dāng)你導(dǎo)入一個類的時候剑鞍,連伴生對象的成員也會導(dǎo)入進(jìn)來,
  //當(dāng)明確指定需要導(dǎo)入哪個屬性的時候昨凡,優(yōu)先級會更高(當(dāng)然不是隱式參數(shù)的情況)
  import ImplicitsMsg._
  printContent(content)

}

另外一個例子說明:

object Implicits {
  implicit val content="Scala"
}

//object ImplicitsMsg {
//  val content="ScalaMsg"
//}

object ImplicitAdance extends App {

  def printContent(implicit content:String)=println(content)
  val content="Spark" //有兩個隱式參數(shù)的時候,就會出現(xiàn)沖突
  import Implicits.content //當(dāng)你導(dǎo)入一個類的時候蚁署,連伴生對象的成員也會導(dǎo)入進(jìn)來,
  //當(dāng)明確指定需要導(dǎo)入哪個屬性的時候土匀,優(yōu)先級會更高(當(dāng)然不是隱式參數(shù)的情況)
//  import ImplicitsMsg._
  printContent(content)

}

隱式轉(zhuǎn)換能起到增強(qiáng)功能的作用

class RichFile(val file:File) {
  def dtSpark=println("dySpark:"+file.getName)
}

object Implicits {
  implicit val content="Scala"
  implicit def int2String(x:Int)=x.toString()
  implicit def fileToRichFile(file:File)=new RichFile(file)
  implicit def richFileToFile(richFile:RichFile)=richFile.file //一般還會重新轉(zhuǎn)換回來
}

object ImplicitAdance extends App {

  def printContent(implicit content:String)=println(content)
  val content="Spark" //有兩個隱式參數(shù)的時候,就會出現(xiàn)沖突
  import Implicits._ //當(dāng)你導(dǎo)入一個類的時候形用,連伴生對象的成員也會導(dǎo)入進(jìn)來,
  //當(dāng)明確指定需要導(dǎo)入哪個屬性的時候就轧,優(yōu)先級會更高(當(dāng)然不是隱式參數(shù)的情況)
//  import ImplicitsMsg._
  printContent(content)

  printContent(100)

  (new File(".")).dtSpark

}

這是很有用的,例如我們只想在某一時刻用到一個類的功能田度,但不是一直都在使用妒御,這時候使用隱式轉(zhuǎn)換是非常有用的
一般來說,隱式轉(zhuǎn)換都會放到伴生對象中镇饺,這樣有利于組織代碼乎莉,例如Spark的RDD就是一個很好的例子
在設(shè)計隱式轉(zhuǎn)換的時候必須注意沖突的問題
找出當(dāng)前作用域中隱式參數(shù)的值

println(implicitly[String])

總結(jié)隱式轉(zhuǎn)換的順序:1.上下文 2.伴生對象 3.相關(guān)類型的伴生對象 4.導(dǎo)入

歸納總結(jié):1.隱式轉(zhuǎn)換的幾種類型
2.隱式轉(zhuǎn)換查找的順序
3.幾個例子
4.隱式轉(zhuǎn)換的巨大作用和最佳實踐
5.implicitly[String]的作用


cccc.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奸笤,隨后出現(xiàn)的幾起案子惋啃,更是在濱河造成了極大的恐慌,老刑警劉巖监右,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件边灭,死亡現(xiàn)場離奇詭異,居然都是意外死亡健盒,警方通過查閱死者的電腦和手機(jī)绒瘦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門称簿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惰帽,你說我怎么就攤上這事憨降。” “怎么了该酗?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵授药,是天一觀的道長。 經(jīng)常有香客問我呜魄,道長悔叽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任耕赘,我火速辦了婚禮,結(jié)果婚禮上膳殷,老公的妹妹穿的比我還像新娘操骡。我一直安慰自己,他們只是感情好赚窃,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布册招。 她就那樣靜靜地躺著,像睡著了一般勒极。 火紅的嫁衣襯著肌膚如雪是掰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天辱匿,我揣著相機(jī)與錄音键痛,去河邊找鬼。 笑死匾七,一個胖子當(dāng)著我的面吹牛絮短,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昨忆,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼丁频,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邑贴?” 一聲冷哼從身側(cè)響起席里,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拢驾,沒想到半個月后奖磁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡繁疤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年署穗,在試婚紗的時候發(fā)現(xiàn)自己被綠了寥裂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡案疲,死狀恐怖封恰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褐啡,我是刑警寧澤诺舔,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站备畦,受9級特大地震影響低飒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懂盐,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一褥赊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莉恼,春花似錦拌喉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捶惜,卻和暖如春田藐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吱七。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工汽久, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踊餐。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓回窘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親市袖。 傳聞我的和親對象是個殘疾皇子啡直,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容