从这个问题用了答案, 是否有可能一个TypeTag转换成清单? ,我可以转换TypeTag的体现。
不幸的是,使用这种方法,你就失去了类型参数。 由于事实,你正在使用的runtimeClass做转换。 下面是说明这一点的样本代码:
import scala.reflect.ClassTag
import scala.reflect.runtime.universe._
// From: https://stackoverflow.com/questions/23383814/is-it-possible-to-convert-a-typetag-to-a-manifest
def getManifestFromTypeTag[T:TypeTag] = {
val t = typeTag[T]
implicit val cl = ClassTag[T](t.mirror.runtimeClass(t.tpe))
manifest[T]
}
// Soon to be deprecated way
def getManifest[T](implicit mf: Manifest[T]) = mf
getManifestFromTypeTag[String] == getManifest[String]
//evaluates to true
getManifestFromTypeTag[Map[String, Int]] == getManifest[Map[String, Int]]
//evalutes to false. Due the erasure.
有没有办法从TypeTag转换的体现时,保留类型参数?