Scala的隐式类,隐式参数和值,隐式对象

时间:2024-12-12 15:28:44

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 //采用默认值
  }

}