(一)什么是隐式转换
隐式转换是指:scala自动把一种类型转成另一种类型的过程。这个过程对用户编程而言不可见,不需要用户手动编写代码。
(一)什么是隐式转换
隐式转换是指:scala自动把一种类型转成另一种类型的过程。这个过程对用户编程而言不可见,不需要用户手动编写代码。
package imp
object imp01 {
//// 隐式 偷偷的 .....
implicit def double2Int(d:Double):Int = {
println("double2Int被调用了......")
d.toInt
}
def main(args: Array[String]): Unit = {
// 不能把Double类型 保存到 Int。这样会有精度损失。不会自动做转换。
var i: Int = 1.1
// 可以把int类型保存到Double,会自动转换
var d:Double = 1
}
}
(三)隐式参数
代码一
package imp
object imp02 {
// 隐式函数
// 作用是:在类型转换的过程中,被自动调用
// 特点
// 1. 自动调用
// 2. 名字不重要,形参和返回值的类型是重要的!
// 2. 名字不重要,形参和返回值的类型是重要的!
implicit def double2Int(d: Double): Int = {
println("double2Int被调用了......")
d.toInt
}
// 补充:String转Int的隐式函数,支持将字符串形式的数字转为Int
implicit def string2Int(s: String): Int = {
println("string2Int被调用了......")
s.toInt
}
def main(args: Array[String]): Unit = {
// 不能把Double类型 保存到 Int。这样会有精度损失。不会自动做转换。
var i: Int = 1.1
i = 2.1
i = 3.1
i = "100" // String类型赋值给Int,依赖补充的string2Int隐式函数
// 可以把Int类型保存到Double,会自动转换
var d: Double = 1
}
}
代码二
package imp
object imp03 {
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)
}
}