Scala隐式转换

1.隐式值

object ScalaDemo {

  implicit val str : String = "刘明"

  def main(args: Array[String]): Unit = {
    //匹配隐式值时,不加括号
    show
  }

  def show(implicit name:String)={
    print("name: " + name)
  }
  
}

 

2.隐式方法

object ScalaDemo {

  def main(args: Array[String]): Unit = {
    val aa = new AA
    aa.methodAA()
    //创建了AA,经隐式方法转换,能调用BB里的方法
    aa.methodBB()
  }

  implicit def AB(a:AA):BB={
    new BB
  }
  
}

class AA {
  def methodAA(): Unit ={
    println("methodAA...")
  }
}

class BB {
  def methodBB(): Unit ={
    println("methodBB...")
  }
}

  

3.隐式类

object ScalaDemo {
  
  def main(args: Array[String]): Unit = {
    val aa = new AA
    aa.methodAA()
    //创建了AA,经隐式类的主构造器转换,能调用BB里的所有方法
    aa.methodBB()
    aa.methodBB2()
  }

  implicit class BB(aa: AA) {

    def methodBB(): Unit ={
      println("methodBB...")
    }
    
    def methodBB2(): Unit ={
      println("methodBB2...")
    }
  }

}

class AA {
  def methodAA(): Unit ={
    println("methodAA...")
  }
}

  

  下面的代码标明了类的泛型为java中的Float,而在scala代码中直接写10.5f类型为scala的Float。scala与java存在大量的交互使用,通过隐式转换,省去简单又繁琐的编码。

val compare2 = new CommonCompare[java.lang.Float](10.5f, 20.5f)

  

 

posted @ 2020-04-15 09:50  地中有山  阅读(162)  评论(0编辑  收藏  举报