假设我有以下代码:
abstract class Animal
case class Dog(name:String) extends Animal
var foo:Animal = Dog("rover")
var bar:Dog = foo //ERROR!
我应该如何修复这段代码的最后一行?基本上,我只想做C语言中的那样:
var bar:Dog = (Dog) foo
假设我有以下代码:
abstract class Animal
case class Dog(name:String) extends Animal
var foo:Animal = Dog("rover")
var bar:Dog = foo //ERROR!
我应该如何修复这段代码的最后一行?基本上,我只想做C语言中的那样:
var bar:Dog = (Dog) foo
我自己解决了这个问题。有两种解决方案:
1)进行显式转换:
var bar:Dog = foo.asInstanceOf[Dog]
2) 使用模式匹配自动转换类型,还可以捕获错误:
var bar:Dog = foo match {
case x:Dog => x
case _ => {
// Error handling code here
}
}
var bar:Dog = foo match { case x:Dog => foo.asInstanceOf[Dog] case _ => { // Error handling code here } }
是否有效? - Make42