13.4 类型匹配
可以匹配对象的任意类型,这样做避免了使用isInstanceOf
和asInstanceOf
方法
package com.atguigu.day11.moshipipei
import scala.io.StdIn
object MatchType {
def main(args: Array[String]): Unit = {
// var s: Any = Array(1, 2, 3)
var s: Any = Map("a" -> 11, 2 -> 22)
var result = s match {
case a: Int => println(a); "匹配到的是 Int "
case b: String => println(b); "匹配到的是 String "
case c: Array[Int] => "匹配到的是 Array[Int] "
case d: Map[Int, Int] => "匹配到的是Map[Int, Int]"
case _: BigInt => "匹配到的是 BigInt"
case _ => "啥都没有匹配到"
}
println(result)
}
}
说明:
在进行类型匹配时,编译器会预先检测是否有可能的匹配,如果没有则报错
如果类型匹配成功之后会把
s
的值赋值给case
后面跟着的变量, 而不需要做类型的转换.对数组来说提供数组中元素的类型是必要的,因为数组的底层类型确实是确定的.比如:
Array[Int]
这里的Int
是必须的但是对集合类型比如
Map
, 提供泛型类型是无用的. 因为 Java 的"泛型擦除".Map[Int, String]和Map[Int, Int]
在匹配的时候没有区别. 所以应该使用通用的泛型:Map[_, _]
package com.atguigu.day11.moshipipei
import scala.io.StdIn
object MatchType {
def main(args: Array[String]): Unit = {
var s: Any = Map("a" -> 11, "b" -> 22)
var result = s match {
case d: Map[_, _] => "匹配到的是Map"
case _ => "啥都没有匹配到"
}
println(result)
}
}