1 隐式转换
为一个已存在的类添加一个新的方法。
// 定义一个Man类,方法为eat
scala> class Man(val name: String) {
| def eat(): Unit = {
| println(s"man: $name eat......")
| }
| }
defined class Man
// 定义一个Superman类,方法为fly
scala> class Superman(val name: String) {
| def fly(): Unit = {
| println(s"superman: $name fly......")
| }
| }
defined class Superman
// 创建man对象
scala> val man = new Man("lisi")
man: Man = Man@7e990ed7
// man没有fly方法
scala> man.fly()
<console>:14: error: value fly is not a member of Man
man.fly()
^
// 定义隐式转换函数
scala> implicit def man2superman(man: Man): Superman = new Superman(man.name)
warning: there was one feature warning; re-run with -feature for details
man2superman: (man: Man)Superman
// 现在man可以飞了
scala> man.fly()
superman: lisi fly......
2 隐式参数
// 定义一个函数,有隐式参数
scala> def testParm(implicit name:String): Unit ={
| println(name+".............")
| }
testParm: (implicit name: String)Unit
// 调用函数
scala> testParm("lisi")
lisi.............
// 定义一个隐式常量
scala> implicit val name="zhangsan"
name: String = zhangsan
// 调用函数,会使用隐式常量
scala> testParm
zhangsan.............
3 隐式类
scala> implicit class Calculator(x: Int) {
| def add(a: Int) = a + x
| }
defined class Calculator
// 1神奇得有了add方法
scala> 1.add(3)
res4: Int = 4