Scalaの型の**.type**ってなんでしょうか。
Scalaで列挙型を使いたいときに
シールドクラスとケースオブジェクトを使うとします。
例えば以下のコードです
sealed abstract class Fluits(val value:String) case object Fluits { case object Apple extends Fluits("Apple") case object Banana extends Fluits("Fluits") }
このとき
Fluits.Appleの型は Fluits.Apple.typeになります
この.typeってなんでしょうか?
また、Fluits.Apple:Fluits の型はFluitsです
型のキャストができるのに、なぜデフォルトが**.typeになっているか疑問です。
以下はconsole出力**です
scala> sealed abstract class Fluits(val value:String) defined class Fluits scala> case object Fluits { | case object Apple extends Fluits("Apple") | case object Banana extends Fluits("Fluits") | } defined object Fluits warning: previously defined class Fluits is not a companion to object Fluits. Companions must be defined together; you may wish to use :paste mode for this. scala> scala> Fluits.Apple res2: Fluits.Apple.type = Apple scala> Fluits.Apple:Fluits res3: Fluits = Apple
何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー