【问题标题】:Explicit Type Conversion in ScalaScala 中的显式类型转换
【发布时间】: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

【问题讨论】:

    标签: scala type-conversion


    【解决方案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 你能解释一下吗?谢谢。
    • @om-nom-nom: 将 1) 和 2) 组合成 var bar:Dog = foo match { case x:Dog => foo.asInstanceOf[Dog] case _ => { // Error handling code here } } 是否有效?
    • @Make42 你不需要进行强制转换,只需使用模式匹配中的x
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2012-12-27
    • 2016-06-03
    相关资源
    最近更新 更多