【发布时间】:2017-07-22 17:23:26
【问题描述】:
我正在使用 scala 反射来获取不是方法的案例类的所有字段。然后我想看看该类型是原始类型还是字符串(或这些东西的选项)。这是一个检查字段是否为字符串的简单工作示例。
scala> case class SimpleCase(val1: String)
defined class SimpleCase
scala> val members = typeOf[SimpleCase].members.filter(!_.isMethod).toList
members: List[reflect.runtime.universe.Symbol] = List(value val1)
scala> members.head.typeSignature
res57: reflect.runtime.universe.Type = String
scala> members.head.typeSignature == typeOf[String]
res58: Boolean = true
完全按照我的预期工作。这就是事情变得奇怪的地方——当我对 Int 或任何原始类型做同样的事情时,类型检查测试会失败。以下是上述失败的示例:
scala> case class SimpleCase(val1: Int)
defined class SimpleCase
scala> val members = typeOf[SimpleCase].members.filter(!_.isMethod).toList
members: List[reflect.runtime.universe.Symbol] = List(value val1)
scala> members.head.typeSignature
res59: reflect.runtime.universe.Type = scala.Int
scala> members.head.typeSignature == typeOf[Int]
res60: Boolean = false
scala> members.head.typeSignature == typeOf[scala.Int]
res61: Boolean = false
另外,typeOf[Int] 会打印出来
scala> typeOf[Int]
res62: reflect.runtime.universe.Type = Int
SimpleCase 的val1 的类型签名表明它是scala.Int 而不是typeOf[Int] 的类型签名,即Int。所以我尝试将val1 与typeOf[Int] 和typeOf[scala.Int] 进行比较(尽管我很确定它们是同一个东西)但无济于事。
这里发生了什么?有没有办法解决这个问题?
【问题讨论】:
标签: scala reflection