jak prawidłowo używać asInstanceOf w Scali

Gram z podstawowymi typami danych Scala. Zauważyłem, żescala.Any klasa definiuje metodęasInstanceOf[T0]: T0 ztutaj API ma to, że może „Rzucić obiekt odbiornika na typ T0”. Używając tej metody jako punktu wyjścia, chciałem zbadać casting w Scali. Sprawdziłem także stackoverflow dla innych pytań na ten temat i wymyśliłemto Dzięki tym informacjom napisałem głupi program.

         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) 
             }

         }

Moim celem jest zrozumienie, co się dzieje (i dlaczego) w następujących przypadkach: 1) rzucanie z dowolnego typu na Int. 2) rzucanie z typu Double na Int 3) rzutowanie z String na Int

W pierwszym przypadku dostałem wyjątek ClasscastException, jak poniżej, kiedy uruchomiłem program jako - com.att.scala.Casting.entry. Wyjątek przedstawiono poniżej:

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)

W drugim przypadku otrzymuję następujący wynik: int to 123 x to 123 Int x to 123

W tym przypadku kod powinien wywołać wyjątek ClasscastException, ale tak nie jest. To jest mój niepokój.

W trzecim przypadku otrzymuję wyjątek classcast:

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)

W tym przykładzie moim celem jest dotarcie do podstaw castingu w Scali. Wiem, że ten przykład w żadnym wypadku nie jest prawdziwym przykładem świata, ale starałem się owinąć głowę wokół podstaw.

questionAnswers(3)

yourAnswerToTheQuestion