将枚举参数传递给case类不起作用
问题描述:
有人能告诉我为什么这不起作用吗?将枚举参数传递给case类不起作用
case class XY(enum: MyEnum)
object MyEnum extends Enumeration {
val OP1, OP2 = Value
}
Error: not found: type MyEnum
答
这是因为MyEnum
是一个对象和对象是单例。将单例作为参数传递给case类是不可能的,因为这会强加这个对象的多个实例。
如果你想通过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.Value
和OP1
而不是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)
}
好我新有一种方法! – user21845 2010-05-10 19:19:38