scala進階19-隱式轉換內幕

import scala.io.Source
import java.io.File

class RicherFile(val file: File) {
  def read = Source.fromFile(file.getPath).mkString
}

class MyFile(path: String) extends File(path)
object MyFile {
  implicit def file2RicherFile(file: File) = new RicherFile(file)
}

object Implicits_Internals extends App {
  /**
    * 1、new MyFile("/tmp/test.txt")構造一個MyFile對象
    * 2、調用MyFile對象中的read方法,發現MyFile對象中沒有read方法
    * 3、但是上下文中也沒有隱式類的導入
    * 4、那麼編譯器查找MyFile伴生對象中有沒有隱式轉換,發現有
    * 5、編譯器開始嘗試類型匹配,發現隱式函數中有對File的隱式轉換
    * 6、講MyFile對象轉換成RicherFile對象,即可調用read
    */
  println(new MyFile("/tmp/test.txt").read)
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章