как правильно использовать 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. Я знаю, что этот пример никоим образом не является примером из реального мира, но я пытался обернуть голову вокруг основ.

Ответы на вопрос(3)

Ваш ответ на вопрос