在默認情況下,基於JVM
的scala
在運行時是沒有類型信息,在容器類型中,只有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中的類型擦除