介绍
在scala2.10 后提供了 隐式类,可以使用 implicit 声明类,隐式类的非常强大, 同样可以扩展类的功能,而且比 隐式函数更加方便,在 集合中隐式类会发挥重要的作用。
特点
- 必须有 且 只有一个 构造参数,该参数的类型 是 被扩展的 类
- 隐式类必须被定义在 类内 或 伴生对象内 或 包对象内 ,隐式类 不能是 顶级的(top-level objects)。
- 隐式类不能是
case class(样例类) - 作用域内不能有 同名的 类 或 隐式类
案例:不改源码,扩展类库功能
不改变源码的情况下,给 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("篮球")
}
}
比隐式函数更加简单直观