隐式转换
- 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)
}
}