13.4 类型匹配

可以匹配对象的任意类型,这样做避免了使用isInstanceOfasInstanceOf方法

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)
  }
}
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""