自学内容网 自学内容网

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

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


原文地址:https://blog.csdn.net/2401_83374628/article/details/144412961

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!