信息来源于 DT大数据梦工厂微信公众号:DT_Spark
代码如下:
/**
* 伴生对象 中的隐式方法
* Created by zhiwang on 2015/7/24.
*/
import java.io.File
import scala.io.Source
class RichFile2(val file:File) {
def read = Source.fromFile(file.getPath).mkString
}
class File_Implicit2(path:String) extends File(path)
object File_Implicit2{
implicit def file2RichFile(file:File) = new RichFile2(file) // file => RichFile2
}
object Implicits_Internals {
def main(args: Array[String]) {
println(new File_Implicit2("I:\\aa.txt").read )
}
}
过程解析
当 new File_Implicit2 对象 执行read 过程中,并没有import 导入隐式转换相关方法,而是 通过 File_Implicit2 的伴生对象来完成。
当代码改为如下语句时:
object File_Implicit3{
implicit def file2RichFile(file:File) = new RichFile2(file) // file => RichFile2
}
object Implicits_Internals {
def main(args: Array[String]) {
import File_Implicit3._
println(new File_Implicit2("I:\\aa.txt").read )
}
}
代码执行的 不是伴生对象File_Implicit2 中的隐式转换,而是 File_Implicit3 中的。
参考资料
DT大数据微信公众账号:DT_Spark