object DateDemo {
def main(args: Array[String]): Unit = {
implicit def int2DateHelper(day:Int) = new DateHelper(day) //隐式转换
val ago = "ago"
val later = "later"
println(2.days(ago))
println(5 days later) //省略 . 和 () 和上一条语句作用等同
}
}
class DateHelper(day:Int){
def days(when:String):String={
val now = LocalDate.now
if (when == "ago"){
now.minusDays(day).toString
}else{
now.plusDays(day).toString
}
}
}
输出结果:
2019-02-24
2019-03-03
为 Int 添加了额外的 days 方法
说明:
1. 隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类型和返回值类型)有关
2. 隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能被识别
3. 如果需要用到的一个现有类库, 但是很不幸, 里面缺少一个我们需要的方法, 这时候就可以借助隐式转换了
4. 隐式转换会在编译时自动匹配, 自动为符合输入输出变量类型的函数添加对应的隐式并编译运行