como usar asInstanceOf corretamente em Scala

Eu tenho jogado com tipos básicos de dados Scala. Notei que oscala.Any classe define o métodoasInstanceOf[T0]: T0 deAqui A API diz que pode "Transmitir o objeto receptor para o tipo T0". Usando este método como ponto de partida, eu queria investigar o casting no Scala. Além disso, eu procurei stackoverflow para outras questões sobre este tema e eu vim comisto Com esta informação em mãos, escrevi um programa bobo.

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

         }

Meu objetivo é entender o que acontece (e por que) nos seguintes casos: 1) conversão de um tipo Any para um Int. 2) casting de tipo Double para um Int 3) casting de String para Int

No primeiro caso, eu tenho um tempo de execução ClasscastException como abaixo, quando eu corri o programa como - com.att.scala.Casting.entry. A exceção é mostrada abaixo:

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)

No segundo caso, recebo o seguinte resultado: int é 123 x é 123 Int x é 123

Nesse caso, o código deve produzir um ClasscastException, mas isso não acontece. Essa é a minha preocupação.

No terceiro caso, recebo uma exceção de classe:

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)

Com este exemplo, meu objetivo é chegar aos fundamentos do casting no Scala. Eu sei que este exemplo não é um exemplo do mundo real, por qualquer meio, mas eu estava tentando colocar minha cabeça em volta do básico.

questionAnswers(3)

yourAnswerToTheQuestion