Scala中的显式类型转换

78

假设我有以下代码:

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个回答

149

我自己解决了这个问题。有两种解决方案:

1)进行显式转换:

var bar:Dog = foo.asInstanceOf[Dog]

2) 使用模式匹配自动转换类型,还可以捕获错误:

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

14
注意,由于JVM类型擦除,第二种方式在泛型上容易出错。 - om-nom-nom
@om-nom-nom,你能稍微解释一下吗?谢谢。 - Weihong Diao
@WeihongDiao 请查看 https://dev59.com/CHNA5IYBdhLWcg3wF5yO。 - om-nom-nom
@om-nom-nom:将1)和2)组合成var bar:Dog = foo match { case x:Dog => foo.asInstanceOf[Dog] case _ => { // Error handling code here } }是否有效? - Make42
@om-nom-nom:你说模式匹配不容易出错,我认为类型转换可能会出错,或者我理解错了吗?因此,我认为将两者结合起来可能会消除所有容易出错的情况? - Make42
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接