scala教程:隐式转换-隐式类(implicit)

介绍

在scala2.10 后提供了 隐式类,可以使用 implicit 声明类,隐式类的非常强大, 同样可以扩展类的功能,而且比 隐式函数更加方便,在 集合中隐式类会发挥重要的作用。

特点

  1. 必须有 且 只有一个 构造参数,该参数的类型 是 被扩展的 类
  2. 隐式类必须被定义在 类内 或 伴生对象内 或 包对象内 ,隐式类 不能是 顶级的(top-level objects)。
  3. 隐式类不能是 case class(样例类)
  4. 作用域内不能有 同名的 类 或 隐式类

案例:不改源码,扩展类库功能

不改变源码的情况下,给 Student 类增加 play方法

class Student{
  def study(lession:String):Unit={
    println("学习 "+lession)
  }
}

实现

class Student{
  def study(str:String):Unit={
    println("学 "+str)
  }
}

object 隐式转换_增加方法 {

  //隐式类必须有一个构造参数,类型是 被扩展的类
  implicit class StudentEx(val std:Student){
    def play(str:String):Unit = {
      println("玩 "+str)
    }
  }

  def main(args: Array[String]): Unit = {
    val std:Student = new Student()
    std.study("scala")
    // 隐式转换 ,底层实现:new StudentEx(std).play("篮球")
    std.play("篮球")

  }
}

比隐式函数更加简单直观


原文出处:/show_1IX1L0O82g28.html