1、隐式转换简述
所谓隐式转换函数(implicit conversion function)指的是那种以implicit关键字声明的带有单个参数的函数。正如它的名称所表达的那样,这样的函数将被自动应用,将值从一种类型转换为另一种类型。
我们可以给转换函数起任何名称。由于我们并不显式地调用它,因此,你可能会想用较短的名称,比如i2f,不过,我们有时候也会有需要,显式地引入转换函数。因此我建议,我们应坚持使用source2Target这种约定俗成的命名方式
Scala并不是第一个允许程序员提供自动类型转换的语言。不过,Scala给了程序员相当大的控制权在什么时候应用这些转换。我们将讨论隐式转换究竟在什么时候发生,以及如何微调这个过程
尽管Scala提供了微调隐式转换的工具,语言的设计者们也意识到隐式转换可能有潜在的问题。为了避免在使用隐式函数时出现警告,我们可以添加
import scala.language.implicitConversions 语句或编译器选项
-language:implicitConversions.
在C++中,你可以以单参数构造器或者名为operator Type()的成员函数来指定隐式转换。不过,在C++中,你无法有选择地允许或禁止这些函数,因而得到不想要的转换时常有的事。
2、案例一
object ImplicitSyllabus {
def main(args: Array[String]): Unit = {
//不要出现二义性
implicit def a(d:Double) = d.toInt
//不加上,上边这句,试一试
val i1:Int = 3.5
println(i1)
}
}
Scala
def b(d:Double) = {}
b(10f)
Java
public class Test{
public static void test1(double x){
}
public static void main(String[] args){
test1(10)
}
}
在Java 和Scala 中,自动进行了转换,但是在隐式转换的时候,它不会跟你玩那些虚的,是什么类型就是什么类型
3、案例二
object ImplicitSyllabus {
def main(args: Array[String]): Unit = {
def a1(implicit x: Int) = {
x
}
implicit val aa: Int = 6
println(a1)
}
}
转载于:https://www.jianshu.com/p/d730bcb35155