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 中的显式类型转换的主要内容,如果未能解决你的问题,请参考以下文章

Jvm(45),指令集----类型转换指令

智能转换与 KOTLIN 中的显式转换有何不同

(二十一)类型转换指令

Python 强制类型转换

关于隐式转换和显式转换

使用 DataContractSerializer 的接口中的显式类型