1. 隐式类 implicit class 丰富一个类的方法
object Test {
def main(args: Array[String]): Unit = {
100.run
100.marry
}
implicit class AddFunctionToInt(i:Int){
def run ={
println(s"整数${i} run起来了")
}
def marry={
println(s"整数${i} 结婚了")
}
}
}
结果:
整数100 run起来了
整数100 结婚了
笔记:
增加(丰富 enrich)一个类的功能,类似于 iOS中的 category
2. implicit def 隐式函数 偷偷摸摸地执行某个方法
object Test {
def main(args: Array[String]): Unit = {
println(add("3",4))
}
def add(a:Int,b:Int):Int ={
a+b
}
implicit def stringToInt(a:String):Int = {
Integer.parseInt(a)
}
}
结果是 7 ,尽管add 只能接收 Int 类型的参数,但是在程序执行的背景下面,有一个 隐式函数,并且是针对 String类型的,
编译器就会对这个"3"做手脚,将其转换成Int类型。
3. implicit 参数
object Test {
def main(args: Array[String]): Unit = {
implicit val a = 100
increment
println(increment)
}
def increment(implicit x:Int): Int ={
x+1
}
}
执行结果: 1
我们执行 increment 这个函数的时候居然没有 传参数,为什么?因为他接收一个隐式的参数,所以可以不传,increment 根据上下文环境,会将一个隐式值 放到 这个参数里面。
下面再做一个实验:
object Test {
def main(args: Array[String]): Unit = {
implicit val a = 100
implicit val b = 200
increment
println(increment)
}
def increment(implicit x:Int): Int ={
x+1
}
}