隐式转换的定义
//隐式转换:编译器自动滴,偷偷滴,把数据A->B
object test04 {def main(args: Array[String]): Unit = {val i:Int=1//把Int类型,转化成Double类型//Int -> Double//隐式转换失败val b:Double=1//隐式转换失败val d:Double=1.2val j:Int=d}
}
object test05 {def main(args: Array[String]): Unit = {//小明def getAge():Double={19.5}implicit def abc(d:Double):Int={d.toInt}//implicit 隐式转换//函数def main(args: Array[String]): Unit = {
// val i:Int=doubleToInt(getAge())val i:Int=getAge()println(i)}}
}
隐式值
//隐式值
object test06 {//函数的默认参数//函数的默认参数值:小花def sayName(implicit name:String="小花"):Unit={println(s"我叫:$name")}//需求:更改函数参数的默认值(不传入这个值的时候,用到的值),不要写死//步骤://1.定义函数的默认值时,添加implicit//2.需要修改这个默认值是,定义一个同类型的 隐式值:implicit 修饰变量implicit val xxx:String="小明"def main(args: Array[String]): Unit = {sayName("无敌小旋风")sayNamesayName}
}
给字符串添加新的功能
object test07 {//目标:给字符串添加新的功能//用到了:implicit 函数+普通类StrongStringimplicit class StrongString(str:String) {def isPhone: Boolean = {val reg = "1[3-9]\\d{9}".rreg.matches(str)}}
// implicit def stringtoStrongString(str:String):StrongString={
// new StrongString(str)
// }def main(args: Array[String]): Unit = {val str:String="13612345678"//要求:给字符串补充一个功能 isPhone,判断它是不是一个手机号码val rs=str.isPhone
// val rs=(new StrongString(str))isPhone
// val rs=stringtoStrongString(str).isPhoneprintln(s"$str 的检查结果是:$rs")}
}
给所有整数添加新功能
import scala.language.postfixOps
//给所有的整数添加新功能
//1.判断是否偶数
//2.阶乘。5!=5*4*3*2*1=120
object test10 {implicit class XXX(d:Int){def isEven:Boolean={d % 2 == 0}//补充一个求阶乘的函数。函数的名称就是idef ! : Int={var rs = 1for(i<-1 to d){rs *= i}rs}}def main(args: Array[String]): Unit = {println(10.isEven)//trueprintln(9.isEven)//falseprintln(5!)//120println(5.!)//120println(10!)//3628800}
}
隐式对象
//隐式对象
//格式:implicit object
//作用:给函数的默认参数提供隐式值
object test11 {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 = {
// println()getConn(DataBase("sqlite","localhost:80"))getConn//采用默认值}
}