【发布时间】:2014-12-19 14:37:56
【问题描述】:
我正在使用 Jackson 将 JSON 反序列化为 Map[String,Any]。 Jackson 试图根据它在 JSON 中看到的内容来推断我的数字类型。问题在于,有时我得到Long,有时我得到Int,具体取决于值的实际大小。
我在尝试编写一个可以将值转换为Long 的方法时遇到了麻烦,无论它是Long 还是Int。我在拆箱时不断收到错误,因为在没有明确知道它是 Long 还是 Int 提前的情况下,我似乎无法找到将其转换为 Long 的方法。
我正在尝试这个:
def getIntOrLongAsLong[T: Manifest](item: Option[T], default:Long): Long = {
if(item == None)
default
else {
val result = item.get
result.asInstanceOf[Long]
}
}
我希望通过将item.get 分配给val,它会在此处拆箱,但似乎并非如此。我见过有人在类似的事情上使用模式匹配,但我仍然不知道在哪里/如何进行演员表。
【问题讨论】:
-
进行模式匹配似乎有效。如果模式匹配显示 Int 那么我可以执行 result.asInstanceOf[Int].toLong
-
如果在模式匹配中匹配
Int,为什么需要asInstanceOf?result.toLong应该没问题。