假设我有一个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])
。
谢谢,祝你好运。
答案 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)