Scala 将任何字符串强制转换为Int
我有一个类型为Scala 将任何字符串强制转换为Int,scala,Scala,我有一个类型为Any的变量,运行时类型为String,我想将其转换为Int: val a: Any = "123" val a: Any = "123" val b = a.asInstanceOf[String].toInt 如果我尝试转换为Int,我将得到一个异常java.lang.ClassCastException: val b = a.asInstanceOf[Int] 那么我该怎么做呢?强制转换不会转换您的类型,它只是告诉系统您认为您足够聪明,能够知道对象的正确类型。例如: t
Any
的变量,运行时类型为String
,我想将其转换为Int
:
val a: Any = "123"
val a: Any = "123"
val b = a.asInstanceOf[String].toInt
如果我尝试转换为Int,我将得到一个异常java.lang.ClassCastException
:
val b = a.asInstanceOf[Int]
那么我该怎么做呢?强制转换不会转换您的类型,它只是告诉系统您认为您足够聪明,能够知道对象的正确类型。例如:
trait Foo
case class Bar(i: Int) extends Foo
val f: Foo = Bar(33)
val b = f.asInstanceOf[Bar] // phew, it works, it is indeed a Bar
您可能正在寻找的是将字符串
转换为Int
:
val a: Any = "123"
val a: Any = "123"
val b = a.asInstanceOf[String].toInt
或者,由于可以对任何对象调用toString
:
val b = a.toString.toInt
如果字符串不是有效数字,您仍然可以获得运行时异常,例如
"foo".toInt // boom!
通常,您会避开类强制转换,并在Scala中嵌套
try catch
块
import scala.util.{ Try, Failure, Success };
val x: Any = 5;
val myInt = Try { x.toString.toInt) } getOrElse { 0 // or whatever}; // this is defaulting
val mySecondInt = Try { x.toString.toInt };
mySecondInt match {
case Success(theactualInt) => // do stuff
case Failure(e) => // log the exception etc.
}
在Java中,its
Integer.toString
。。。你也应该能够从scala中使用它。嗯,a.asInstanceOf[String].toInt
这是一个双重转换,我想避免它。toInt
不是一个转换。这是一种转换方法,基本上可以追溯到java.lang.Integer.parseInt
强制转换和转换之间的区别是什么?强制转换意味着你告诉虚拟机你认为你知道一个值x
必须是给定类型的a
。在强制转换之后,您可以在x
上调用A
的接口(方法)。它不会以任何方式改变x
,它只会在运行时验证它确实是A
(否则会抛出ClassCastException
)。转换采用类型为A
的值,并生成类型为B
的完全独立的新值。转换是在编译时检查的常规方法调用。我通常应该使用哪种转换,哪种转换更便宜(更快)?