cómo usar asInstanceOf correctamente en Scala

He estado jugando con los tipos de datos básicos de Scala. Me di cuenta de que elscala.Any clase define el métodoasInstanceOf[T0]: T0 desdeaquí La API dice que puede "Convertir el objeto receptor para que sea del tipo T0". Usando este método como punto de partida, quería investigar el casting en Scala. Además, busqué Stackoverflow para otras preguntas sobre este tema y se me ocurrióesta Con esta información en la mano, escribí un programa tonto.

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

         }

Mi objetivo es comprender qué sucede (y por qué) en los siguientes casos: 1) conversión de un tipo a un int. 2) Casting desde Double Type a un Int 3) Casting desde String a Int

En el primer caso, obtuve un tiempo de ejecución ClasscastException como se muestra a continuación, cuando ejecuté el programa como - com.att.scala.Casting.entry. La excepción se muestra a continuación:

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)

En el segundo caso, obtengo el siguiente resultado: int es 123 x es 123 Int x es 123

En este caso, se supone que el código produce una excepción ClasscastException, pero no lo hace. Esa es mi preocupación.

En el tercer caso, obtengo una 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)

Con este ejemplo, mi objetivo es llegar a lo más básico del casting en Scala. Sé que este ejemplo no es un ejemplo del mundo real de ninguna manera, pero estaba tratando de envolver mi cabeza en torno a lo básico.

Respuestas a la pregunta(3)

Su respuesta a la pregunta