在前一小节中,我们提到Scala默认已经帮我们实现了大量的隐式转换函数,在特定情况下会自动调用相应的隐式转换函数完成隐式转换,从而保证程序的顺利执行。但Scala提供的隐式转换函数数量毕竟是有限的,不可能满足实际应用,此时需要定义自己的隐式转换函数,例如Scala已经帮我们实现了Int类型到Float类型的隐式转换函数:
implicit def int2float(x: Int): Float = x.toFloat
现在如果我们想要完成Float类型到Int类型转换的话,则需要定义相应的隐式转换函数,具体代码如下:
//直接将Float对象赋值给Int类型变量会报错
scala> val intValue:Int=2.55f
<console>:7: error: type mismatch;
found : Float(2.55)
required: Int
val intValue:Int=2.55f
^
//定义一个隐式转换函数,该隐式转换函数将Float类型转换成Int类型(注意函数的输入参数)
scala> implicit def float2int(x:Float)=x.toInt
float2int: (x: Float)Int
//再次将Float类型对象赋值给Int类型变量时,程序运行通过
scala> val intValue:Int=2.55f
intValue: Int = 2
定义完成隐式转换函数implicit deffloat2int(x:Float)=x.toInt后,valintValue:Int=2.55f语句便能够顺利通过的原因是:编译器发现赋值对象的类型与最终类型不匹配时,会在当前作用域范围内查找能够将Float类型转换成Int类型的隐式转换函数,隐式转换函数float2int正好满足要求,从而程序可以正常运行。而未定义该隐式转换函数之前,valintValue:Int=2.55f会出错,是因为在当前作用域中找不到Float类型到Int类型的隐式转换函数。
Scala学习(公众微信号:ScalaLearning)每天为大家带来一点Scala语言、Spark、Kafka、Flink、AKKA等大数据技术干货及相关技术资讯
技术永无止境,勇攀高峰,一往直前!
觉得文章不错?扫描关注





