2013-11-15 20 views
1

Any型與運行時類型的String一個變量,我要投射到Int施放任何字符串來INT

val a: Any = "123" 

如果我嘗試在投爲int,我會得到一個例外java.lang.ClassCastException

val b = a.asInstanceOf[Int] 

我該怎麼做呢?

+0

在Java中的'Integer.toString' ...你應該能夠使用它從階爲好。 – tilpner

回答

7

鑄造不會轉換您的類型,它只是告訴系統,你認爲你足夠聰明,知道一個對象的正確類型。例如:

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 

什麼你可能尋找的是轉換一個StringInt

val a: Any = "123" 
val b = a.asInstanceOf[String].toInt 

或者,因爲你可以在任何對象上調用toString

val b = a.toString.toInt 

如果字符串不是有效數字,您仍然可以獲得運行時異常,例如

"foo".toInt // boom! 
+0

好吧,'a.asInstanceOf [String] .toInt'這是一個雙重演員,我想避免它。 –

+2

'toInt' _is不是cast_。這是一種轉換方法,基本上可以追溯到'java.lang.Integer.parseInt' –

+0

轉換和轉換有什麼區別? –

1

一般來說,您將避開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. 
} 
0
scala> val a:Any = "123" 
a: Any = 123 

scala> val b = a.toString.toInt 
b: Int = 123