如何获取地图中第二个类型参数的清单?
例如,以下功能:
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
- 正如预期的那样
请问任何人解释一下吗?
答案 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