как правильно использовать asInstanceOf в Scala
Я играл с основными типами данных Scala. Я заметил, чтоscala.Any
класс определяет методasInstanceOf[T0]: T0
отВот В API есть то, что он может «привести объект-получатель к типу T0». Используя этот метод в качестве отправной точки, я хотел исследовать кастинг в Scala. Кроме того, я искал stackoverflow для других вопросов по этой теме, и я придумалэтот
Имея эту информацию в руках, я написал глупую программу.
package com.att.scala
import com.att.scala.Sheltie
object Casting {
//def foo(x: String){
def foo(x: Int) {
println("x is " + x)
//if(x.isInstanceOf[String])
if(x.isInstanceOf[Int])
println("Int x is " + x)
//println("String x is " + x)
}
def entry() {
//val double: Any = 123.123
val double: Double = 123.23
val int = double.asInstanceOf[Int] //exception expected here
//val str: String = "123"
foo(int)
}
}
Моя цель - понять, что происходит (и почему) в следующих случаях: 1) приведение от любого типа к Int. 2) приведение типа Double к Int 3) приведение от String к Int
In the first case, I got a run time ClasscastException as below, when I ran the program as - com.att.scala.Casting.entry. The exception is shown below:
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(Unknown Source)
at com.att.scala.Casting$.entry(Casting.scala:17)
In the second case, I get the following result: int is 123 x is 123 Int x is 123
В этом случае предполагается, что код создает исключение ClasscastException, но это не так. Это мое беспокойство.
In the third case, I get a classcastexception:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(Unknown Source)
at com.att.scala.Casting$.entry(Casting.scala:20)
На этом примере моя цель - познакомиться с основами кастинга в Scala. Я знаю, что этот пример никоим образом не является примером из реального мира, но я пытался обернуть голову вокруг основ.