为什么TypeTag没有方法runtimeClass但Manifest和ClassTag没有

Xia*_*ong 5 scala

我有这个代码一般将String转换为Dto,如果我使用Manifest和ClassTag,我可以使用方法runtimeClass来获取运行时类,但是TypeTag没有这个方法

class ObjectMapper[T] {

  def readValue(x: String, t: Class[T]): T = ???
}

class Reader {
  def read[W: Manifest](x: String): W = {
    val mapper = new ObjectMapper[W]
    mapper.readValue(x, implicitly[Manifest[W]].runtimeClass.asInstanceOf[Class[W]])
  }

}
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么TypeTag没有方法runtimeClass

提前谢谢了

Ale*_*nov 7

假设TypeTag来自scala.reflect.runtime.universe,你可以得到这样的类:

def runtimeClass(tag: TypeTag) = tag.mirror.runtimeClass(tag.tpe)
Run Code Online (Sandbox Code Playgroud)

它没有此方法,因为并非所有TypeTags都来自运行时Universe.

  • 这绝对是正确的.如果TypeTag来自宏Universe,那么它所引用的JVM类可能尚未生成. (3认同)