隐式转换
所谓隐式转换函数(implicit conversion function)指的是那种以implicit 关键字声明的带有单个参数的函数
首先,看这个例子
implicit def file2RichFile(from: File): RichFile = new RichFile(from)
这是一个隐式转换方法,方法名为 file2RichFile 意为File转换成RichFile类型,该方法有一个参数为File类型,方法将from这个参数传入RichFile构造参数中
该方法需要写在对象中
object Test {
implicit def file2RichFile(from: File): RichFile = new RichFile(from)
}
RichFile类
class RichFile(val from: File) {
def read: String = Source.fromFile(from.getPath).mkString
}
测试:
object Test {
def main(args: Array[String]): Unit = {
import top.itning.implicits.Test2._
new File("").read
}
}
File 类本身没有read方法,但是用隐式转换将File类转换成了RichFile 类调用了read 方法
隐式参数
函数或方法可以带有一个标记为implicit的参数列表.这种情况下,编译器将会查找缺省值,提供给该函数或方法
首先定义一个类型为String类型的隐式函数
object Test {
implicit val str: String = "隐式参数"
}
在方法a中的参数标记为implicit,则在main方法中调用该方法不传参则编译器会查找对应类型的隐式参数,但前提需要导入
object Test {
def main(args: Array[String]): Unit = {
//导入
import top.itning.implicits.Test2._
a
}
def a(implicit a: String): Unit = {
println(a)
}
}
执行结果
隐式参数