Scala 将选项[Any]强制转换为int
如何将其转换为Int而不是Scala 将选项[Any]强制转换为int,scala,Scala,如何将其转换为Int而不是Some(Int) 我尝试了toInt,它给出了一个错误值toInt不是选项[Any]的成员,使用.asInstanceOf方法 a.getOrElse(0).asInstanceOf[Int] 我必须注意,这是不安全的强制转换:如果您的选项不包含Int,您将得到运行时异常。您可以执行a.get.asInstanceOf[Int],但是它是不安全的。更好的方法是保留类型信息,即使用选项[Int]而不是选项[Any]。这样,您就不需要使用asInstanceOf强制转换
Some(Int)
我尝试了
toInt
,它给出了一个错误值toInt不是选项[Any]
的成员,使用.asInstanceOf
方法
a.getOrElse(0).asInstanceOf[Int]
我必须注意,这是不安全的强制转换:如果您的选项不包含Int,您将得到运行时异常。您可以执行
a.get.asInstanceOf[Int]
,但是它是不安全的。更好的方法是保留类型信息,即使用选项[Int]
而不是选项[Any]
。这样,您就不需要使用asInstanceOf
强制转换结果
val a:Option[Int] = Some(1)
val i = a.get
直接使用get
是不安全的,因为如果选项
为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
})
你不能投的原因是你不应该投。虽然静态类型编程语言允许您在一种类型和另一种类型之间手动强制转换,但我能给您的最好建议是忘记这些特性 特别是,如果您想充分利用每种编程语言,请尝试使用合适的用户,如果一种语言不适合您的使用,请选择另一种语言(例如动态键入的语言): 如果进行强制转换,则会导致潜在的编译时错误,而我们 因为它很容易解成类CastException,我们 不喜欢,因为它发生在运行时。如果需要在中使用强制类型转换 Scala,很可能您使用了不正确的模式
忘记铸造的一点;模式匹配显然是我同意的方法。模式匹配是非常强大和可怕的:)虽然我很欣赏这种感觉,但在现实生活中的项目中,事情并不总是黑白分明的。我有必要这样做,因为它可能是底层第三方API返回的4种类型之一。这是一种非常弱的机制。你可以用更好的图案做同样的事情,也许。。。你为什么不试着解释一下你想做什么?
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
})