(一)案例:检查自己是不是一个合法的手机号码?
/**
* 需求 :
* 让所有字符串具备一个功能:检查自己是不是一个合法的手机号码?
*
* 1. 目前的字符串是没有这个功能的
*
* 2. 扩展String这个类
*
* */
object imp06 {
// 让所有的String对象,都有了一个新的方法 isPhone!
implicit class StrongString(s:String) {
def isPhone():Boolean = {
val reg = "^1[356789]\d{9}$".r
reg.matches(s)
}
}
def main(args: Array[String]): Unit = {
val str = new String("12345678998")
var str1 = "abcdefghijk"
// 判断自己是否是一个手机号
if(str1.isPhone){
println(s"${str1} 是手机号")
} else {
println(s"${str1} 不是手机号")
}
}
}
结果:
abcdefghijk 不是手机号
补充一个隐式类,它的功能是 :接收一个字符串,得到一个对象,这个对象就有这个isPhone方法。
(二)案例:计算阶乘
需求说明:给一个所有的整数添加一个功能,例如:
3! = 3 * 2 * 1。
println(3!) // 输出6
思路分析:与上面的增强版字符串一样,我们这的整数是增强版的整数。
import scala.language.postfixOps
/**
* 需求 :
* 让所有整数具备一个功能:计算阶乘
*
* n! = 1 * 2 * 3 * 4... * n
*
* 1. 目前的字符串是没有这个功能的
*
* 2. 扩展String这个类
*
* */
object imp07 {
implicit class StrongInt(n:Int) {
def !() = {
// println("阶乘......")
var s = 1
for(i <- 1 to n){
s *= i
}
s
}
}
def main(args: Array[String]): Unit = {
var k = 5 // 5 * 4 * 3 * 2 * 1
// 计算k的阶乘
printf(s"${k} 的阶乘是: ${k!}")
}
}
结果:
5 的阶乘是: 120
请特别注意implicit class
隐式对象,主要充当默认值的作用。
隐式类,用来增加现有类的功能。