将枚举参数传递给案例类不起作用

use*_*845 25 enumeration scala class

有人能告诉我为什么这不起作用?

case class XY(enum: MyEnum)

object MyEnum extends Enumeration {
  val OP1, OP2 = Value 
}
Run Code Online (Sandbox Code Playgroud)

错误:未找到:键入MyEnum

Mic*_*mer 45

这是因为MyEnum是一个对象而对象是单例.将单例作为参数传递给case类是不可能的,因为这会强制存在这个对象的多个实例.

如果要传递MyEnum值(即枚举值),请使用MyEnum.Value:

case class XY(enum: MyEnum.Value)

object MyEnum extends Enumeration { val OP1, OP2 = Value }
Run Code Online (Sandbox Code Playgroud)

之后,您可以MyEnum按预期使用:

val x = XY(MyEnum.OP1)
Run Code Online (Sandbox Code Playgroud)

顺便说一句:一个常见的模式是定义一个类型别名,所以你可以调整代码一点点(即使用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)
}
Run Code Online (Sandbox Code Playgroud)