隐式类

27 阅读3分钟

(一)隐式类

有一个现有的类。现在我们需要对这个类的功能进行拓展,额外补充一个方法。但是,不允许直接修改原来的类的代码。

假设这里有一个类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
  }

}

image.png

  • 完结撒花 !!!!!!!!!!
  • 制作不易 希望·一键三连 在此感谢关注的粉丝宝宝
  • 新来的宝宝可以关注下主播哟!!!!!