隐式转换

Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicitconversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转换函数,转换为另外一种类型的对象并返回。这就是“隐式转换”。
通常建议将隐式转换函数的名称命名为“one2one”的形式。
隐式转换函数与普通函数唯一的语法区别就是,要以implicit开头,而且最好要定义函数返回类型。

  1. implicit def double2Int(d:Double):Int={
  2. d.toInt
  3. }
  4. val v:Int = 3.0
  5. println(v)

注意细节

隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类型和返回值类型)有关。
隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别

  1. class developer {
  2. def select(): Unit = {
  3. println("select data")
  4. }
  5. }
  6. class admin {
  7. def delete(): Unit = {
  8. println("delete data")
  9. }
  10. }
  11. object TransformObjectApp {
  12. def main(args: Array[String]): Unit = {
  13. implicit def deleteData(dev: developer): admin = {
  14. new admin
  15. }
  16. val d = new developer
  17. d.select()
  18. d.delete()
  19. }
  20. }

隐式值

隐式值也叫隐式变量,将某个形参变量标记为implicit,所以编译器会在方法省略隐式参数的情况下去搜索作用域内的隐式值作为缺省参数