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

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

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