2008-10-05 26 views
74

Digamos que tengo el siguiente código:conversión explícita en Scala

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

¿Cómo fijo la última línea de este código? Básicamente, solo quiero hacer qué, en un lenguaje tipo C:

var bar:Dog = (Dog) foo 

Respuesta

133

Me di cuenta de esto. Hay dos soluciones:

1) Las conversión explícita: errores

var bar:Dog = foo.asInstanceOf[Dog] 

2) Utilice la coincidencia de patrones para lanzarlo para ti, esto también captura:

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

No es necesario el bloque. – Anonymous

+0

Anónimo: ¿qué bloque? –

+13

Tenga en cuenta que esa segunda forma es propensa a errores en los genéricos debido a la eliminación del tipo de JVM –

Cuestiones relacionadas