内容简介:隐式转换函数是以首先看下面的代码如果想要转换成功,就需要借助隐式转换函数
隐式转换函数是以 implicit关键字 声明的带有 单个参数的函数 。这种函数将会 自动应用 ,将值从一种类型转换为另一种类型
① 隐式转换最佳入门案例
首先看下面的代码
如果想要转换成功,就需要借助隐式转换函数
为了更好的理解,我们看看反编译后的字节码文件,底层编译器是如何隐式转换函数的
根据需求我们可以将任意数据类型的对象转换为我们想要的数据类型,以及进行处理
implicit def func2(num: Long): Int = { (num - 1).toInt } val num2: Int = 10L println(num2) // 9 复制代码
② 隐式转换的细节
-
隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类型和返回值类型)有关。
-
隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别
③ 强悍的隐式转换丰富类库功能
如果需要为一个类增加一个方法,可以通过隐式转换来实现。(动态增加功能)比如想为 Oracle
类增加一个 delete
方法
看看底层编译器的 魔术
细节
在当前程序中,如果想要给 Oracle
类增加功能是非常简单的,但是在实际项目中,如果想要增加新的功能就会需要改变源代码,这是很难接受的。而且违背了软件开发的 OCP
开发原则
在这种情况下,可以通过隐式转换函数给类动态添加功能
④ 隐式值
隐式值也叫 隐式变量 ,将某个形参变量标记为 implicit ,所以编译器会在方法省略隐式参数的情况下去搜索 作用域内 的隐式值作为缺省参数
示例代码
细节练习
- 以下代码的函数命名编译器如何定义
看看底层编译器的字节码文件
-
隐式值细节
总结
-
隐式值的优先级高于默认值
-
当匹配到多个隐式值就会报错
-
⑤ 隐式类
在 Scala2.10
后提供了隐式类,可以使用 implicit
声明类,隐式类的非常强大,同样可以扩展类的功能,比前面使用隐式转换丰富类库功能更加的方便,在集合中隐式类会发挥重要的作用
示例代码
object Main { def main(args: Array[String]): Unit = { // 隐式类会独立生成一个 .class 文件,还会在当前 Main 类生成一个转换函数 implicit class Driver(oracle: Oracle) { def add(): Unit = { println("Driver add") } } val oracle = new Oracle // 实质上是调用了转换函数生成一个隐式类对象来调用 add 方法 oracle.add() // Driver add oracle.func() // Oracle func } } class Oracle { def func(): Unit = { println("Oracle func") } } 复制代码
隐式类的特点
-
其所带的构造参数有且只能有一个
-
隐式类必须被定义在
类
或伴生对象
或包对象
里,即隐式类不能是 顶级的 (top-level objects
) -
隐式类不能是
case class
(类型匹配) -
作用域内不能有与之相同名称的标示符
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 照片整理系列二 —— 照片整理及归档的辛酸历程
- 我自己整理的码农周刊一周分享整理
- JavaScript进阶系列-类型转换、隐式类型转换
- Android 多国语言转换 Excel 和 Excel 转换为 string
- 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理)
- [SSL证书转换(一)]关于JKS 转换成 CRT 和 KEY
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML and CSS
Elisabeth Robson、Eric Freeman / O'Reilly Media / 2012-9-8 / USD 39.99
Tired of reading HTML books that only make sense after you're an expert? Then it's about time you picked up Head First HTML and really learned HTML. You want to learn HTML so you can finally create th......一起来看看 《Head First HTML and CSS》 这本书的介绍吧!