Scala 2.11:获取集合中类型参数的Class(classOf的结果)

时间:2015-12-11 22:06:25

标签: scala types

假设我有一个Map[K, V]val m = Map[String, Int]("asdf" -> 1)

的实例

我的函数定义为def getType[T : TypeTag](t: T) = typeOf[T]

我可以使用getType(m).typeArgs获取List[Type](String, Int)

如何为List[Class]String获得Int?换句话说,我希望从List(classOf[String], classOf[Int])或任何其他地图组合中收集Map[String, Int]

我的最终目标是为Cassandra RichRow写一个Row,其中我可以(r: Row).getAs[Map[String, Int]]("mymap"),并且可以调用r.getMap("mymap", classOf[String], classOf[Int])

谢谢,祝你好运。

2 个答案:

答案 0 :(得分:0)

您可以从Class获得Type,如下所示:

scala.reflect.runtime.currentMirror.runtimeClass(tpe) 

答案 1 :(得分:0)

尝试以下方法:

def getTypeArgs[T : TypeTag](t: T) = typeOf[T].typeArgs

scala> val m = Map[String, Int]("asdf" -> 1)
m: scala.collection.immutable.Map[String,Int] = Map(asdf -> 1)

scala> getTypeArgs(m)
res2: List[reflect.runtime.universe.Type] = List(String, Int)