前言
隐式转换的本质就是搞了个代理。举个例子,你一拳可以打死条老虎,看上去是你干的,但实际上是你朋友开枪打死的,别人就以为是你打的,觉得你很牛。
代码
1.1、先用显式转换实行一下
object TestImplicit{
def main(args: Array[String]) {
//显式转换
val file="d://db.sql"
val str=new RichFile(file).read()
println(str)
}
}
class RichFile(val path:String) {
def read():String={
Source.fromFile(path).mkString//如何返回一个String类型?答案是直接写即可
}
}
1.2、打印效果如下图所示
2.1、用隐式转换实现
2.2.1、需要新建一个MyPreDef
object MyPreDef {
implicit def fileToRichFile(path:String)=new RichFile(path)
}
2.2.2、调用
object TestImplicit{
def main(args: Array[String]) {
//隐式转换
import testimplicit.MyPreDef.fileToRichFile
val content2=file.read()
println(content2)
}
}
解释:
a)在调用file.read,其实是悄悄的调用了RichFile.read
b)注意:需要先定义一个MyPreDef,在这个里面定义一个转换规则,将str->RichFile
示意图如下所示: