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-隐式转换内幕
最新推荐文章于 2018-09-16 10:00:12 发布