0 摘要
对Scala隐式样转换的学习
1 隐式转换概述
适应场景,需要动态的增强一个类,现有的功能不能满足要求,
2 类比Java
Java:动态代理,加强现有的类的功能
3 增强现有的类型
就是说一个类调用另一个类中它自己没有定义的方法时,隐式转换可以自动将该类转换为另一类从而扩展自己的功能,然后调用该方法。
有时候进行代码重构,要增强他的某项功能同时又不想做太大的改动。
可以看到经过隐式转换后,Man这个对象具有了加强的功能fly()
1 object ImplicitApp extends App { 2 //定义隐式转换函数。Scala底层会进行隐式转换 3 implicit def manToSuperman(man: Man): SuperMan = new SuperMan(man.name) 4 5 private val kai = new Man("kai") 6 kai.fly() 7 } 8 9 class Man(val name: String) { 10 def eat(): Unit = { 11 println(s"man[ $name ] eat") 12 } 13 } 14 15 class SuperMan(val name: String) { 16 def fly(): Unit = { 17 println(s"SuperMan[ $name ] fly") 18 } 19 }
4 理解
我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。