一、

隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型
例如: int --> double
Scala
object test {
// 复习隐式转换
// 隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型
// 例如: int --> double
// 它有失败的时候 (double ---> int), 有成功的时候
// 当它转换失败的时候,我们提供一个工具,让它能成功
// 明确地,把double转成int
implicit def X(d:Double): Int = {
d.toInt
}
def main(args: Array[String]): Unit = {
var i:Int = 1
var j:Double - 2.1
i = j // 把double 转入 Int
// j = 1 // 把Int 转入 Double
println(i)
}
}
二、
Scala
object test1 {
// 开始你的代码1
class StrongString(val str:String) {
def isPhone(): Boolean = {
val reg = "1[3-9]\\d{9}".r
reg.matches(str)
}
}
// 定义一个特殊的转换函数,把str ===> StrongString的对象
def tranform(str:String):StrongString = {
new StrongString(str)
}
def main(args: Array[String]): Unit = {
val str = "13612345678"
// println(isPhone(str))
// println(isPhone("abc"))
// println( (new StrongString(str)).isPhone() )
println( tranform("abc").isPhone() )
println(str.isPhone()) // ==> true
println("136a".isPhone()) // ==> false
}
}
以下是使用隐式函数更正后的 Scala 代码,主要思路是通过定义隐式转换函数,让普通的String
类型能够自动转换为StrongString
类型,这样就可以直接在String
上调用isPhone
方法了,代码如下:
Scala
object test1 {
// 定义StrongString类,用于封装字符串并提供判断是否为手机号的方法
class StrongString(val str: String) {
def isPhone(): Boolean = {
val reg = "1[3-9]\\d{9}".r
reg.matches(str)
}
}
// 定义隐式转换函数,将String类型隐式转换为StrongString类型
implicit def stringToStrongString(str: String): StrongString = {
new StrongString(str)
}
def main(args: Array[String]): Unit = {
val str = "13612345678"
// 这里可以直接在String类型的变量上调用isPhone方法,得益于隐式转换
println(str.isPhone())
println("136a".isPhone())
}
}
三、校验自己的手机号
Scala
package test38
// 需求1:
// 完成一个功能,让所有的字符串都能调用isPhone方法,来校验自己是不是一个手机号
object test1 {
// 开始你的代码
class StrongString(val str: String) {
def isPhone(): Boolean = {
val reg = "1[3-9]\\d{9}".r
reg.matches(str)
}
// 验证是否身份证号
def isID:Boolean = {
val reg = "".r
reg.matches(str)
}
}
// 定义一个特殊的转换函数1,把str ===> StrongString的对象
implicit def xxxx(str: String): StrongString = {
// println("偷偷调用implicit")
new StrongString(str)
}
def main(args: Array[String]): Unit = {
println("1136a".isPhone()) // ==> false
}
}
