scala - Scala-没有TypeTag可用当使用案例类尝试获取TypeTag时发生异常吗?

标签 scala reflection types

我正在查看scala反射(reflect)API,并且遇到了很多异常。

Doc引用:
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
}

我有一个异常(exception):
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)

我猜想这与我如何调用该方法有关。

最佳答案

我终于发现了问题所在。
案例类必须在顶层定义-它们不能嵌套。
这样的事情会失败。

class Foo {
  describe("getSettings") {
    case class ParameterObject(foo: String)
    settings.getTypeTag(path, ParameterObject)
  }
}

class Clazzy {
      def getTypeTag[T: TypeTag](obj: T) = ru.typeTag[T]
}

关于scala - Scala-没有TypeTag可用当使用案例类尝试获取TypeTag时发生异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988558/

相关文章:

haskell - 类型运算符的顺序和种类要求

java - NoSuchMethodError : scala. Predef$.$conforms()Lscala/Predef$$less$冒号$less

scala - 奇怪的scala编译不会失败,但是给出错误的答案

java - 是否可以通过 JMX 加载类信息?

列的数据类型更改后的 MySQL 警告

haskell - 在 Haskell 中,如何将函数限制为一种数据类型的唯一构造函数?

arrays - 有效地遍历匹配 bool 条件的数组?

scala 以格式保存到数组

java - 泛型 - 动态创建数据

go - 调用在 golang 中作为接口(interface)变量接收的函数