Map中值类型的清单给出了Nothing类型

时间:2012-04-24 21:01:40

标签: scala

如何获取地图中第二个类型参数的清单?

例如,以下功能:

  def asMap[T <: AnyRef]()(implicit m : Manifest[T]) : Map[Int, T] = {
    println(m) // Nothing
    ...
  }

调用为:

val map : Map[Int,String] = asMap()

隐式m参数绑定到 Nothing

与数组相对应:

  def asArray[T <: AnyRef]()(implicit m : Manifest[T]) : Array[T] = {
    println(m)  // java.lang.String
    ...
  }

调用:

val arr : Array[String] = asArray()

隐式m参数绑定到java.lang.String - 正如预期的那样
请问任何人解释一下吗?

2 个答案:

答案 0 :(得分:2)

看起来是因为Map在其第二个参数Map[A, B+]中是协变的,而Array在其类型中是不变的:Array[T]

答案 1 :(得分:2)

我不太明白你在做什么 - 如果你没有Map作为参数,怎么能得到参数?

def getManifest[A,B: Manifest](map: Map[A,B]) = manifest[B]

val map = Map(1 -> "one")
getManifest(map) //Manifest[java.lang.String] = java.lang.String