在scala2.10后提供了隐式类,可以使用implicit声明类,但是需要注意以下几点:
(1)其所带的构造参数有且只能有一个
(2)隐式类必须被定义在“类”或“伴生对象”或“包对象”里,不能置顶
不关在哪里定义,其实都是在对象里面定义,也就是说,必须在已经实例化的作用域内,定义隐式类
(3)隐式类不能是case class(case class的定义,会自动生成伴生对象,与2矛盾)
(4)作用域内不能有与之相同名称的标示符
object StringUtils {
//隐士类
implicit class StringImprovement(val s:String){
def increment = s.map(x => (x + 1) toChar)
}
}
object StringMain{
def main(args: Array[String]): Unit = {
import unit15.StringUtils._
println("abcde".increment)
}
}
转载于:https://www.jianshu.com/p/f8104f838433