【发布时间】:2018-04-12 07:40:10
【问题描述】:
我使用的是 scala 版本 2.12.3,当我在控制台代码中测试一些模式匹配时:
val d: Any = Map("1" -> "2", "3" -> 4)
d match {
case map: Map[String, Any] => println(map)
case _ => println("should not be here")
}
我收到了一些警告,例如 <console>:14: warning: non-variable type argument String in type pattern scala.collection.immutable.Map[String,Any] (the underlying of Map[String,Any]) is unchecked since it is eliminated by erasure。
我在谷歌上搜索过这个警告,几乎所有的答案都被告知 scala 运行时间会在进行模式匹配时擦除类型,回答这个问题似乎是合理的,但是当我使用以下代码时:
val e = Map("1" -> "2", "3" -> 4)
e match {
case map: Map[String, Any] => println(map)
case _ => println("should not be here")
}
没有关于类型擦除的警告,那么这两种模式匹配有什么区别,请解释一下什么时候会发生类型擦除,谢谢!
【问题讨论】:
-
为什么首先介绍
Any问题? -
@cchantep 我首先介绍
Any问题,因为我对模式匹配的类型擦除感到很困惑,第二个代码块让我对运行时类型擦除有点怀疑。 -
最好解决第一个问题,而不是试图解决失去类型安全的这种后果
标签: scala pattern-matching type-erasure