10.1 隐式转换
为啥需要隐式转换?
看下面的代码:
object Scala01 {
def main(args: Array[String]): Unit = {
// 当把范围大的数据类型的数据复制给小范围的类型的数据的时候, 必须要强制转换, 否则会报错. 有没有办法让这种情况也能按照我们想要的方自动转换呢?
val num : Int = 3.5 //?
println(num)
}
}
使用
隐式转换需要执行隐式函数!
10.1.1 隐式函数基本介绍
隐式转换函数是以implicit
关键字声明的带有
这种函数会根据需要将会自动被调用,将值从一种类型转换为另一种类型.
10.1.2 隐式函数快速入门
package com.atguigu.day10
object ImplicitDemo1 {
def main(args: Array[String]): Unit = {
// 隐式函数
implicit def f1(d: Double): Int = {
d.toInt
}
var a: Int = 3.9
println(a)
}
}
10.1.3 隐式函数底层工作原理
10.1.4 隐式转换的注意事项和细节
隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(
函数参数类型和返回值类型 )有关。隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别
有两个隐式函数都可以实现从 Double->Int
的转换, 所以报错. 有点类似于 Java 中方法重载一样.
- 隐式转换函数的命名: 通俗的写法是
source2Targe
, 比如:double2Int