如何将其转换为Int而不是Some(Int)
val a: Option[Any] = Some(1)
我尝试了toInt
,但却发出错误value toInt is not a member of Option[Any]
答案 0 :(得分:39)
你可以做a.get.asInstanceOf[Int]
然而它不安全。更好的方法是保留类型信息,即使用Option[Int]
而不是Option[Any]
。然后,您不需要使用asInstanceOf
转换结果。
val a:Option[Int] = Some(1)
val i = a.get
直接使用get
是不安全的,因为如果Option
是None
,则抛出异常。因此使用getOrElse
更安全。或者您可以使用a
上的模式匹配来获取值。
val a:Option[Any] = Some(1) // Note using Any here
val i = (a match {
case Some(x:Int) => x // this extracts the value in a as an Int
case _ => Int.MinValue
})
答案 1 :(得分:13)
使用.asInstanceOf
方法
a.getOrElse(0).asInstanceOf[Int]
我必须注意,这是 unsafe 强制转换:如果你的选项不包含Int,你将获得运行时异常。
答案 2 :(得分:3)
你不能施展它的原因是因为你不应该施放。虽然静态类型编程语言允许您在一种类型和另一种类型之间手动转换,但我能给您的最佳建议是忘记这些功能。
特别是,如果您想充分利用每种编程语言,请尝试创建一个合适的用户,如果某种语言不适合您想要的用法,只需选择另一种语言(例如动态类型):
如果您进行了强制转换,则会转换潜在的编译时错误,我们就是这样 喜欢因为它很容易解决,我们就是ClassCastException 不喜欢因为它发生在运行时。如果你需要使用演员表 Scala,很可能你使用的是不正确的模式。