scala的隐式转换基本使用

18 阅读1分钟

隐式转换

  • 1.隐式转换是指:scala自动把一种类型转成另一种类型的过程。这个过程对用户编程而言不可见,不需要用户手动编写代码。
  • 2.不能把Double类型,保持到Int,这样会有精度损失,不会自动做转换
  • 3.可以把int类型保持到Double,会自动转换
package imp

object imp01 {
  implicit def double2Int(d:Double):Int={
    println("double2Int被调用了......")
    d.toInt
  }

  def main(args: Array[String]): Unit = {
    //不能把Double类型,保持到Int,这样会有精度损失,不会自动做转换
    val i:Int=1.1
    //可以把int类型保持到Double,会自动转换
    var d:Double=1
  }
}

4.特点:①自动调用;②名字不重要,形参和返回值类型是重要的 eg:①

package imp

object imp01 {
  implicit def double2Int(d:Double):Int={
    println("double2Int被调用了......")
    d.toInt
  }
  implicit def stringToInt(d: String): Int = {
    println("stringToInt被调用了......")
    d.toInt
  }

  def main(args: Array[String]): Unit = {
    //不能把Double类型,保持到Int,这样会有精度损失,不会自动做转换
    var i:Int=1.1
    //可以把int类型保持到Double,会自动转换
    i=2.1
    i=3.1

    i="100"
    var d:Double=1
  }
}

package imp

object imp02 {
  class KM(var value:Double) {
    override def toString:String=s"${value}千米"
  }
  class M(var value:Double) {
    override def toString:String=s"${value}米"
  }
  implicit def km2m(km: KM):M={
    new M(1000*km.value)
  }

  def main(args: Array[String]): Unit = {
    val km1=new KM(1)
    val m1:M=km1
    println(km1)
    println(m1)

  }
}

package imp

object imp03 {
  class MY(var value:Double) {
    override def toString:String=s"${value}美元"
  }
  class RMB(var value:Double) {
    override def toString:String=s"${value}米人民币"
  }
  implicit def myTomb(my: MY):RMB={
    new RMB(6.9*my.value)
  }

  def main(args: Array[String]): Unit = {
    val my1=new MY(1)
    val rmb1:RMB=my1
    println(my1)
    println(rmb1)

  }
}