scala 基础 隐式类型

时间:2023-01-11 23:13:16

关键字implicit用来标记一个隐式定义。编译器才可以选择它作为隐式变化的候选项。你可以使用implicit来标记任意变量,函数或是对象。

你可以为implicit定义任意的名称。通常情况下你可以任意命名,implicit的名称只在两种情况下有用:一是你想在一个方法中明确指明,另外一个是想把那一个引入到当前作用域。

object Implicit {

def main(args: Array[String]): Unit = {
import java.util._

class DateHelper(number: Int){
def days(when: String): Date={
var date = Calendar.getInstance()
when match{
case "ago" => date.add(Calendar.DAY_OF_MONTH,-number)
case "from_now" => date.add(Calendar.DAY_OF_MONTH,number)
case _ => date
}
date.getTime()
}
}
//只要该方法在当前范围内存在(通过当前import可见或是位于当前文件)
//scala就会自动调用它,将int转换为DateHelper实例然后调用days方法
implicit def convertInt2DateHelper(number: Int) = new DateHelper(number)

val past = 2 days "ago"
println(past)
val appointment = 5 days "from_now"
println(appointment)
}

}