Scala隐式转换

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提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。

  

  

  

posted @ 2019-10-19 21:31  TrueKai  阅读(209)  评论(1编辑  收藏  举报