隐式类
- 隐式类。
- implicit class
- 作用:在不修改原来类的基础之后,增加新的功能
object imp04 {
class User() {
def insertUser():Unit = {
println("insertUser......")
}
}
implicit class UserStrong(user:User) {
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()
}
}
案例:验证字符串是否手机号
目标:让任意一个字符串具备一个功能:判断是否是一个合法的手机号。
String类是系统提供的,并没有isPhone这个方法。
现在就要去在不修改String类的情况下,增加这个方法。
object imp05 {
implicit class StrongString(s:String) {
// 手机号验证方法
def isPhone:Boolean = {
val reg = "^1[35678]\d{9}$".r
reg.matches(s)
}
// 补充:身份证号验证方法(简化版,实际身份证规则更复杂)
def isIDCard:Boolean = {
// 18位身份证正则(简化:前17位数字 + 最后1位数字/字母Xx)
val reg = "^\d{17}[0-9Xx]$".r
reg.matches(s)
}
}
def main(args: Array[String]): Unit = {
val str = new String("13617295643")
println(str.isPhone)
println("134567891a".isPhone)
println("130567891a".isPhone)
println("429005202011012231".isIDCard) // true
println("40900520201101223a".isIDCard) // false
}
}
案例:计算阶乘
目标:让任意一个整数具备一共功能:计算阶乘
n! = 123*...*n
5! = 12345 = 120
import scala.language.postfixOps
object imp06 {
implicit class StrongInt(n:Int) {
def ! :Int = {
var rst = 1
for(i <- 1 to n) {
rst *= i
}
rst
}
}
def main(args: Array[String]): Unit = {
println(4!) // 24
println(5!) // 120
}
}