2014-07-23 1 views
3

Je suis confus comme comment isInstanceOf fonctionne dans Scala. Si je fais quelque chose comme ceci:Scala isInstanceOf et l'effacement de type

val x: Int = 5 
x.isInstanceOf[Int] 

Étant donné que Scala ne effacement de type, ne doit pas la machine virtuelle Java supprimer toutes les informations de type lors de l'exécution?

Répondre

9

Ce n'est pas toutes les informations de type, juste des informations sur types génériques. Considérez ceci:

scala> val l = List("foo") 
l: List[String] = List(foo) 

scala> l.isInstanceOf[List[String]] 
res0: Boolean = true 

scala> l.isInstanceOf[List[Int]] 
<console>:9: warning: fruitless type test: a value of type List[String] cannot also be a List[Int] (the underlying of List[Int]) (but still might match its erasure) 
       l.isInstanceOf[List[Int]] 
          ^
res1: Boolean = true 

Ils ont tous deux revenir true, parce que le type est effacé List.

Questions connexes