как правильно использовать 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) приведение типа Any к типу Int. 2) приведение типа Double к Int 3) приведение типа String к Int
В первом случае я получил ClasscastException во время выполнения, как показано ниже, когда я запускал программу как - com.att.scala.Casting.entry. Исключение показано ниже:
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)
Во втором случае я получаю следующий результат: int is 123 x is 123 Int x is 123
В этом случае предполагается, что код создает исключение ClasscastException, но это не так. Это мое беспокойство.
В третьем случае я получаю 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. Я знаю, что этот пример никоим образом не является примером из реального мира, но я пытался обернуть голову вокруг основ.