续imp

24 阅读1分钟
package imp

/*
目标:已有一个写好的类,要求在不修改这个类的源代码的情况下,拓展这个类的新功能!
思路:
1. 补充定义一个新类,在这个新类中提供新方法
2. 提供一个隐式转换函数,把之前旧类对象转换成这个新类对象。
*/
object imp05 {

  class User() {
    def insertUser(): Unit = {
      println("insertUser......")
    }
  }

  class UserStrong() {
    def updateUser(): Unit = {
      println("updateUser......")
    }
  }

  implicit def xxxxx(user: User): UserStrong = {
    println("自动调用隐式转换函数......")
    new UserStrong
  }

  def main(args: Array[String]): Unit = {
    val u1 = new User()
    u1.insertUser()
    // val u2 = new UserStrong()
    u1.updateUser()
    // u2.updateUser()
  }
}

运行结果如图所示:

image.png ``` package imp

/* 目标:让任意一个字符串具备一个功能:判断是否是一个合法的手机号。 String类是系统提供的,并没有isPhone这个方法。 现在就要去在不修改String类的情况下,增加这个方法。 */ object imp06 {

// 隐式类:为String扩展方法 implicit class StrongString(s: String) { // 判断是否为合法手机号 def isPhone: Boolean = { // 手机号正则(修正:匹配11位,开头为13/15/13/17/18/19等) val reg = "^1[3-9]\d{9}$" reg.matches(s) }

// 判断是否为合法身份证号(18位)
def isIDCard: Boolean = {
  // 身份证正则(简单匹配,实际需更复杂校验)
  val reg = "^\d{17}[0-9Xx]$"
  reg.matches(s)
}

}

def main(args: Array[String]): Unit = { val str = new String("13617295643") // val str = "13617295643"

// 验证手机号
println(str.isPhone) // 输出:true
println("134567891a".isPhone) // 输出:false
println("130567891a".isPhone) // 输出:false

// 验证身份证号
println("42900520201010223X".isIDCard) // 输出:true
println("40900520201010223a".isIDCard) // 输出:false

} }

运行结果如图所示:

![image.png](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/deafd470be58436b9688660c1a30222c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5peg6IO955qE6bih5Z2X:q75.awebp?rk3s=f64ab15b&x-expires=1771297260&x-signature=DiTcZfFBsjQsCACF5Fv3pjRPg7g%3D)