我Any
型與運行時類型的String
一個變量,我要投射到Int
:施放任何字符串來INT
val a: Any = "123"
如果我嘗試在投爲int,我會得到一個例外java.lang.ClassCastException
:
val b = a.asInstanceOf[Int]
我該怎麼做呢?
我Any
型與運行時類型的String
一個變量,我要投射到Int
:施放任何字符串來INT
val a: Any = "123"
如果我嘗試在投爲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
什麼你可能尋找的是轉換一個String
到Int
:
val a: Any = "123"
val b = a.asInstanceOf[String].toInt
或者,因爲你可以在任何對象上調用toString
:
val b = a.toString.toInt
如果字符串不是有效數字,您仍然可以獲得運行時異常,例如
"foo".toInt // boom!
好吧,'a.asInstanceOf [String] .toInt'這是一個雙重演員,我想避免它。 –
'toInt' _is不是cast_。這是一種轉換方法,基本上可以追溯到'java.lang.Integer.parseInt' –
轉換和轉換有什麼區別? –
一般來說,您將避開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.
}
scala> val a:Any = "123"
a: Any = 123
scala> val b = a.toString.toInt
b: Int = 123
在Java中的'Integer.toString' ...你應該能夠使用它從階爲好。 – tilpner