1. ホーム
  2. scala

Scala における明示的な型変換

2023-08-20 22:37:13

質問

次のようなコードがあるとします。

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

どのように解決するのですか?

自分で考えてみました。 解決方法は2つあります。

1) 明示的なキャストを行う。

var bar:Dog = foo.asInstanceOf[Dog]

2) パターンマッチングでキャストする、これもエラーになる。

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