Scala 深入理解隐式转换
2018-03-04 23:08
148 查看
Scala 深入理解隐式转换
1. 隐式转换
Scala 提供的隐式转换和隐式参数功能,是非常有特色的功能。是 Java 等编程语言所没有的功能。它可以允许你手动指定,将某种类型的对象转换成其他类型的对象或者是给一个类增加方法。通过这些功能,可以实现非常强大、特殊的功能。Scala 的隐式转换,其实最核心的就是定义隐式转换方法,即 implicit
conversion function。定义的隐式转换方法,只要在编写的程序内引入,就会被Scala 自动使用。Scala 会根据隐式转换方法的签名,在程序中使用到隐式转换方法接收的参数类型定义的对象时,会自动将其传入隐式转换方法,转换为另外一种类型的对象并返回。这就是“隐式转换”。其中所有的隐式值和隐式方法必须放到 object 中。
然而使用 Scala 的隐式转换是有一定的限制的,总结如下:
implicit 关键字只能用来修饰方法、变量(参数)。
隐式转换的方法在当前范围内才有效。如果隐式转换不在当前范围内定义(比如定义在另一个类中或包含在某个对象中),那么必须通过 import 语句将其导。
2. 隐式参数
所谓的隐式参数,指的是在函数或者方法中,定义一个用 implicit 修饰的参数,此时 Scala 会尝试找到一个指定类型的,用 implicit 修饰的参数,即隐式值,并注入参数。Scala 会在两个范围内查找:
当前作用域内可见的 val 或 var 定义的隐式变量;
一种是隐式参数类型的伴生对象内的隐式值;
3. 隐式转换方法作用域与导入
Scala 默认会使用两种隐式转换,一种是源类型,或者目标类型的伴生对象内的隐式转换方法;一种是当前程序作用域内的可以用唯一标识符表示的隐式转换方法。如果隐式转换方法不在上述两种情况下的话,那么就必须手动使用
import 语法引入某个包下的隐式转换方法,比如 import test._。通常建议,仅仅在需要进行隐式转换的地方,用 import 导入隐式转换方法,这样可以缩小隐式转换方法的作用域,避免不需要的隐式转换。
4. 隐式转换的时机
当对象调用类中不存在的方法或成员时,编译器会自动将对象进行隐式转换当方法中的参数的类型与目标类型不一致时
喜欢就点赞评论+关注吧
感谢阅读,希望能帮助到大家,谢谢大家的支持!
相关文章推荐
- 转载:深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala的隐式转换系统
- 深入理解Scala中的隐式转换系统
- 结合代码理解Scala的隐式转换
- scala implicit 隐式转换
- 深入理解通过Collections将集合转换为线程安全类集合
- 第66讲scala 中伴生对象的隐式转换
- scala隐式转换&尾递归
- 深入理解Scala中的类型系统
- scala中的隐式类型转换
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- scala进阶19-隐式转换内幕