Scala 中的显式类型转换
Posted
技术标签:
【中文标题】Scala 中的显式类型转换【英文标题】:Explicit Type Conversion in Scala 【发布时间】:2010-09-15 08:23:22 【问题描述】:假设我有以下代码:
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】:这是我自己想出来的。有两种解决方案:
1) 进行显式转换:
var bar:Dog = foo.asInstanceOf[Dog]
2) 使用模式匹配为您转换它,这也会捕获错误:
var bar:Dog = foo match
case x:Dog => x
case _ =>
// Error handling code here
【讨论】:
注意,由于 JVM 类型擦除,第二种方式在泛型上容易出错 @om-nom-nom 你能解释一下吗?谢谢。 @WeihongDiao 请看***.com/questions/1094173/… @om-nom-nom: 将 1) 和 2) 组合成var bar:Dog = foo match case x:Dog => foo.asInstanceOf[Dog] case _ => // Error handling code here
是否有效?
@Make42 你不需要进行强制转换,只需使用模式匹配中的x
以上是关于Scala 中的显式类型转换的主要内容,如果未能解决你的问题,请参考以下文章