enumパラメータをcaseクラスに渡しても機能しない 質問する

enumパラメータをcaseクラスに渡しても機能しない 質問する

なぜこれが機能しないのか誰か教えてもらえますか?

case class XY(enum: MyEnum)

object MyEnum extends Enumeration {
  val OP1, OP2 = Value 
}

エラー: 見つかりません: タイプ MyEnum

ベストアンサー1

これは、MyEnumがオブジェクトであり、オブジェクトがシングルトンであるためです。シングルトンをケース クラスの引数として渡すことはできません。そうすると、このオブジェクトのインスタンスが複数存在することになるからです。

MyEnum の値 (つまり列挙値) を渡す場合は、次を使用しますMyEnum.Value

case class XY(enum: MyEnum.Value)

object MyEnum extends Enumeration { val OP1, OP2 = Value }

その後はMyEnum期待どおりに使用できます:

val x = XY(MyEnum.OP1)

ちなみに、一般的なパターンは型エイリアスを定義することです。そのため、コードを少し調整することができます (つまり、MyEnumの代わりにを使用しMyEnum.ValueOP1の代わりに を使用しますMyEnum.OP1)。

object MyEnum extends Enumeration {
  type MyEnum = Value
  val OP1, OP2 = Value
}

import MyEnum._

case class XY(enum: MyEnum)

class C {
  val x = XY(OP1)
}

おすすめ記事