(一)隐式类
有一个现有的类。现在我们需要对这个类的功能进行拓展,额外补充一个方法。但是,不允许直接修改原来的类的代码。
假设这里有一个类User,它的内部有一个方法 insertUser
package Array
import scala.language.implicitConversions
/**
* 目标: 已有一个写好的类,要求不该这个类的源代码的情况下,扩展这个这个类的新功能
* 思路:
* 1: 补充定义一个新类,在新类中提供新方法
* 2: 提供一个隐式转换函数,把之前旧对象转换成这个新对象
*/
object imp01 {
class User() {
def insertUser():Unit ={
println("insertUser......")
}
}
abstract class UserStrong(){
def updateUser(): Unit= {
println("updateUser.....")
}
}
implicit def xxxx(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()
}
}
隐式类
- implict class
- 作用:在不修改原来类的基础上 ,增加新的功能
package Array
import scala.language.implicitConversions
/**
* 目标: 已有一个写好的类,要求不该这个类的源代码的情况下,扩展这个这个类的新功能
* 思路:
* 1: 补充定义一个新类,在新类中提供新方法
* 2: 提供一个隐式转换函数,把之前旧对象转换成这个新对象
*
* 隐式类
* implict class
* 作用:在不修改原来类的基础上 ,增加新的功能
*/
object imp01 {
class User() {
def insertUser():Unit ={
println("insertUser......")
}
}
implicit class UserStrong(user: User){
def updateUser(): Unit= {
println("updateUser.....")
}
}
// implicit def xxxx(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()
}
}
- 判断手机号
package Array
import scala.language.implicitConversions
/**
* 目标: 让任意一个字符串具备一个功能:判断是否是一个合格的手机号
* String类是系统提供的,并没有isPhone 这个方法
* 现在就要去在不修改String类的情况下,增加这个方法
*/
object imp01 {
implicit class StongString(s:String) {
def isPhone:Boolean={
val reg ="^1[35678]\d{9}$".r
reg.matches(s)
}
}
def main(args: Array[String]): Unit = {
val str=new Sring("13617295643")
// str.isPhone()//判断是否是一个合格的手机号,返回值是boolean . true,false
println(str.isPhone)
println("134567891a".isPhone)
println("130567891a".isPhone)
}
}
- 判断身份证
package Array
import scala.language.implicitConversions
/**
* 目标: 让任意一个字符串具备一个功能:判断是否是一个合格的手机号
* String类是系统提供的,并没有isPhone 这个方法
* 现在就要去在不修改String类的情况下,增加这个方法
*/
object imp01 {
implicit class StongString(s:String) {
def isPhone:Boolean={
val reg ="^1[35678]\d{9}$".r
reg.matches(s)
}
def isIDCard: Boolean = {
val idCardReg = "^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$".r
idCardReg.matches(s)
}
}
def main(args: Array[String]): Unit = {
val str=new String("13617295643")
// str.isPhone()//判断是否是一个合格的手机号,返回值是boolean . true,false
println(str.isPhone)
println("134567891a".isPhone)
println("130567891a".isPhone)
println("421124200603244525".isIDCard) // true
println("42331620201101122a".isIDCard) // false
}
}
- 计算阶乘
package Array
import scala.language. postfixOps
/**
* 目标: 让任意一个整数具备一个功能:计算阶乘
* n!= 1*2*3*....*n
*
*/
object imp01 {
implicit class StrongInt(n: Int) {
def ! : Int = {
val result = 1
for (i <- 1 to n) {
result *= i
}
result
}
}
def main(args: Array[String]): Unit = {
println(4 !) // 24
println(5 !) //120
}
}
- 完结撒花 !!!!!!!!!!
- 制作不易 希望·一键三连 在此感谢关注的粉丝宝宝
- 新来的宝宝可以关注下主播哟!!!!!