wie man asInstanceOf richtig in Scala benutzt

Ich habe mit grundlegenden Scala-Datentypen gespielt. Mir ist aufgefallen, dass diescala.Any Klasse definiert die MethodeasInstanceOf[T0]: T0 vonHier Die API gibt an, dass sie "das Empfängerobjekt in den Typ T0 umwandeln kann". Ausgehend von dieser Methode wollte ich das Casting in Scala untersuchen. Außerdem habe ich Stackoverflow nachgeschlagen, um weitere Fragen zu diesem Thema zu beantwortendiese Mit diesen Informationen schrieb ich ein albernes Programm.

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

         }

Mein Ziel ist es zu verstehen, was (und warum) in den folgenden Fällen passiert: 1) Casting von einem beliebigen Typ zu einem Int. 2) Casting von Double Type zu Int 3) Casting von String zu Int

Im ersten Fall habe ich eine Laufzeit-ClasscastException wie folgt erhalten, als ich das Programm als - com.att.scala.Casting.entry ausgeführt habe. Die Ausnahme wird unten gezeigt:

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)

Im zweiten Fall erhalte ich das folgende Ergebnis: int ist 123 x ist 123 Int x ist 123

In diesem Fall soll der Code eine ClasscastException erzeugen, dies ist jedoch nicht der Fall. Das ist meine Sorge.

Im dritten Fall erhalte ich eine Klassenausnahme:

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)

Mit diesem Beispiel möchte ich mich mit den Grundlagen des Castings in Scala vertraut machen. Ich weiß, dass dieses Beispiel keineswegs ein Beispiel aus der realen Welt ist, aber ich habe versucht, mich mit den Grundlagen zu beschäftigen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage