隐士类:implicit class == 隐式转换函数 + 类
第一步:定义一个有updateUser功能的类 PowerUser
第二步: 定义一个隐式转换函数,把BaseUser ---> PowerUser
代码如下:
package test1
//隐士类:implicit class == 隐式转换函数 + 类
object y1 {class BaseUser(){def insertUser(){println("insertUser")}}//第一步:定义一个有updateUser功能的类 PowerUser//第二步: 定义一个隐式转换函数,把BaseUser ---> PowerUserimplicit class PowerUser(u:BaseUser){def updateUser(){println("updateUser")}}// implicit def transform(u:BaseUser):PowerUser ={
// new PowerUser()
//
// }//给这个类添加新的功能def main(args: Array[String]): Unit = {val u1 = new BaseUser()u1.insertUser()u1.updateUser() //添加一个新的功能}}
目标:给字符串添加新功能
implicit函数 + 普通类StrongString
代码如下:
package test1object y2 {//目标:给字符串添加新功能//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= "1234899389"val rs = str.isPhoneprintln(s"$str 的结果是$str")}}
考试原题:
package test1
import scala.language.postfixOps
//给所有的整数添加新功能
//1.判断是否偶数
//2.阶乘 5! = 5*4*3*2*1=120object y3 {implicit class xxx(d:Int){def isEven:Boolean = {d % 2 == 0}def ! :Int = {var rs = 1for(i <-1 to d) {rs *= i}rs}}def main(args: Array[String]): Unit = {println(10.isEven)println(9.isEven)println(5!)println(5.!)println(8!)}}