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