2
我正在使用scala反射来获取不是方法的case类的所有字段。然后我想看看这个类型是一个原始类型还是字符串(或者这些东西的一个选项)。这是一个简单的工作示例,用于检查字段是否为字符串。Int类型和scala.Int类型
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]
作比较(尽管我很确定他们是同一件事),但都没有效果。
这是怎么回事?有没有解决的办法?
哇!我希望解决方案会很简单。谢谢! – Will