1

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

例如,以下函数:

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

调用为:

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

隐式 m 参数绑定到 Doing the contrast with an Array: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- 正如预期的那样

,有人可以解释一下吗?

4

2 回答 2

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
于 2012-04-24T21:23:28.113 回答
2

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

于 2012-04-24T21:05:41.837 回答