[scala]模式匹配中的類型擦除

在默認情況下,基於JVMscala在運行時是沒有類型信息,在容器類型中,只有Array在運行是保留了類型信息,其它容器不保留類型信息,測試代碼如下

import scala.reflect._

object patternTest {

  def checkIntList[T: ClassTag](list: List[T]): Boolean = {
    if (classTag[T] == classTag[Int]) true
    else false
  }

  def isIntList(x: Any) = x match {
    case _: List[Int] => true
    case _ => false
  }

  def isStringArray(x: Any) = x match {
    case a: Array[String] => true
    case _ => false
  }

  def main(args: Array[String]): Unit = {
    println(isIntList(List(1, 1)))
    println(isIntList(List("abc", "abc")))
    println(checkIntList(List(1, 1)))
    println(checkIntList(List("abc", "abc")))
    println(isStringArray(Array("a", "b", "c")))
    println(isStringArray(Array(1, 2, 3)))
  }
}

程序輸出如下

true
true
true
false
true
false

參考資料:如何解決scala中的類型擦除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章