【发布时间】:2013-06-04 00:34:14
【问题描述】:
我正在查看 scala reflect API,但遇到了很多异常。
文档参考: http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html
如何从泛型中获取类型标签?
def getChildSettings[T: ru.TypeTag](path: String, settingsParameterObject: T) = {
import scala.reflect.runtime.{ currentMirror => m }
val m = ru.runtimeMirror(getClass.getClassLoader)
val classC = ru.typeOf[T].typeSymbol.asClass
}
我得到一个例外:
No TypeTag available for ParameterObject.type
即使是一个非常简单的示例似乎也不起作用(编辑是的,它在 repl 中起作用)
import scala.reflect.runtime.universe._
import scala.reflect.runtime.currentMirror
import scala.reflect.runtime.{universe => ru}
def getTypeTag[T: ru.TypeTag](obj: T) = ru.typeTag[T]
case class ParameterObject(stringType: String, optionType: Option[String])
getTypeTag(ParameterObject)
我猜这与我如何调用该方法有关。
【问题讨论】:
-
嗯,只需将您的简单示例粘贴到 REPL 中(并删除
settings.)在 2.10.1 上对我有用。你会在你的类路径上缺少 scala-reflect 吗? -
残酷!你是对的,它在 repl 中确实有效。我想通了 - 案例类不能嵌套!我在测试用例中定义了案例类,这就是导致问题的原因。
标签: scala reflection types