开发者学堂课程【Scala 核心编程-基础:隐式转换的使用陷阱】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/9012
隐式转换的使用陷阱
1、隐式转换的前提
在进行隐式转换时,需要遵守两个基本的前提:
(1)不能存在二义性。
(2)隐式操作不能嵌套使用 // [举例: ]如:隐式转换函数。
//使用隐式函数来解决
//说明
//1. 在底层会生成一个函数 f1$1...
implicit def f1(d:Double): Int = {
d. toInt
val num3:Int = 5.6//错误==> f1(5.6)
}
这有一个隐式函数,Double 转成 int,但是这个操作不能够在本身的函数去用,比如把5.6给 int,本身是可以的,但是把这句话写到这里面,就形成了嵌套的使用,在底层它就知道是 f1(5.6) ,所以 有一个前提是隐式操作不能嵌套使用。
2、隐式转换的注意事项
创建 ImplicitNotice,选择 object。
package com. atguigu. chapter09
object ImplicitNotice {
def main(args: Array[String]): Unit = {
//1.隐式转换不能有二义性,否则会报错
//2.隐式转换不能嵌套使用
implicit def f1(d: Double): Int = {
Double 类型转成 Int 型
d. toInt
//
val num2:Inf = 2.3
//底层 f1$1(2.3) //f1$1对应的就是 f1,就会形成递归,因此语法是不支持的
}
val num1: Int = 1.1
}
}