小编Gre*_*ory的帖子

Scala无法解释的程序行为

对于以下代码:

object Test {

  class MapOps(map: Map[String, Any]) {
    def getValue[T](name: String): Option[T] = {
      map.get(name).map{_.asInstanceOf[T]}
    }
  }

  implicit def toMapOps(map: Map[String, Any]): MapOps = new MapOps(map)

  def main(args: Array[String]): Unit = {

    val m: Map[String, Any] = Map("1" -> 1, "2" -> "two")

    val a = m.getValue[Int]("2").get.toString
    println(s"1: $a")

    val b = m.getValue[Int]("2").get
    println(s"2: $b")
  }
}
Run Code Online (Sandbox Code Playgroud)

val a计算机毫无例外地计算并且控制台打印1: two,但是在计算时val b,它java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer被抛出.

此外,如果我执行

val c = m.getValue[Int]("2").get.getClass.toString …
Run Code Online (Sandbox Code Playgroud)

casting scala type-inference type-erasure

8
推荐指数
1
解决办法
119
查看次数

标签 统计

casting ×1

scala ×1

type-erasure ×1

type-inference ×1