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)
}
scala進階19-隱式轉換內幕
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.