1.Scala的隐式类定义语法:implicit class 类名(参数){ }
隐式类中参数只能定义一个,参数中的源类型与目标类型一一对应,只能从一种类型转换成另一种类型,不可以一对多或多对。
//隐式类:implicit class==隐式转换函数+类
object test {
class BaseUser(){
def insertUser(){println("insertUser")}
}
//第一步:定义一个有updateUser功能的类 PowerUser
//第二步:定义一个隐式转换函数,把BaseUser--->PowerUser
implicit class PowerUser(u:BaseUser){
def updateUser(){println("updateUser")}
}
//给这个类添加新的功能
def main(args: Array[String]): Unit = {
val u1=new BaseUser()
u1.insertUser()
u1.updateUser() //添加一个新的功能
}
}
2.Scala的隐式参数定义语法:def 函数 (implicit){ }
object test {
//函数的默认参数
def sayName(implicit str:String="小陈"):Unit={
println(str)
}
//隐式参数值
implicit val x:String="小美"
def main(args: Array[String]): Unit = {
sayName("小明")
sayName()
sayName
}
}
3.Scala的隐式值定义方式:implicit val/var 变量名
object test {
//函数的默认参数
def sayName(implicit str:String="小陈"):Unit={
println(str)
}
//隐式参数值
implicit val x:String="小美"
def main(args: Array[String]): Unit = {
sayName("小明")
sayName()
sayName
}
}
4.Scala的隐式对象格式:implicit object
作用:给函数的默认参数提供隐式值
object test3 {
case class DataBase(driver:String,url:String)
implicit object MySql extends DataBase ("mysql","localhost:300")
def getConn(implicit config:DataBase):Unit=
println(config)
def main(args: Array[String]): Unit = {
getConn(DataBase("sqlite","localhost:80"))
getConn //采用默认值
}
}