2008-10-05 7 views
74

Disons que je le code suivant:Conversion explicite Type Scala

abstract class Animal 
case class Dog(name:String) extends Animal 
var foo:Animal = Dog("rover") 
var bar:Dog = foo //ERROR! 

Comment puis-je corriger la dernière ligne de ce code? Fondamentalement, je veux juste faire quoi, dans un langage de type C serait fait:

var bar:Dog = (Dog) foo 

Répondre

133

Je l'ai compris moi-même. Il y a deux solutions:

1) Est-ce que le casting explicite:

var bar:Dog = foo.asInstanceOf[Dog] 

2) Utiliser motif correspondant à jeter pour vous, ce sert également à récupérer les erreurs:

var bar:Dog = foo match { 
    case x:Dog => x 
    case _ => { 
    // Error handling code here 
    } 
} 
+0

Vous n'avez pas besoin le bloc. – Anonymous

+0

Anonyme: quel bloc? –

+13

Notez que cette deuxième façon est génératrice d'erreurs sur les génériques en raison de l'effacement de type JVM –

Questions connexes