Scala 中的显式类型转换

假设我有以下代码:

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

如何修复这段代码的最后一行?基本上,我只是想做,在一个 C-like 语言中会做的事情:

var bar:Dog = (Dog) foo
70030 次浏览

我自己想出来的,有两种解决方法:

1)进行明确的演员表演:

var bar:Dog = foo.asInstanceOf[Dog]

2)使用模式匹配为你施法,这也会捕捉到错误:

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