如何获取Enumeration Value的枚举定义?

时间:2010-01-20 10:48:16

标签: scala enumeration

object TestEnum extends Enumeration{
  val One = Value("One")
  val Two,Three= Value
}
println(TestEnum.One.getClass)
println(TestEnum.One.getClass.getDeclaringClass)//get Enumeration

所以我的问题是如何从TestEnum.One获取Class [TestEnum]?

感谢。

3 个答案:

答案 0 :(得分:7)

我不认为你不幸。 TestEnum.One实际上只是类Enumeration#Value的一个实例。事实上,它比这更糟糕 - 你的枚举值都被类型删除到同一个东西:

object Weekday extends Enumeration {
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}

def foo(w: Weekday.Value)
def foo(e: TestEnum.Value) //won't compile as they erase to same type

由于枚举的实例只是Enumeration#Value的实例,因此它们的声明类只是scala.Enumeration

这令人沮丧,但似乎这些scala枚举比无用更糟糕;如果你通过序列化传递它们(至少在2.7.7中),那么你也不能进行等式检查!

答案 1 :(得分:2)

由于您提到的限制,我将发布我写的Enum类型的链接。我没有使用内置的枚举类型,因为我发现它非常有限。虽然它没有你想要的功能(从元素中获取枚举),但添加它会非常简单。如果您觉得有用,请随时以任何方式使用它。

(来源和测试/示例): http://gist.github.com/282446

BTW如果您愿意并想要帮助将容器添加到EnumElement,请告诉我。

答案 2 :(得分:1)

在我看来,有一个简单的解决方案是不处理Scala Enumerations:使用Java enum-s代替。 Scala现在支持交叉编译一段时间了,只需在Scala源文件夹中添加Java枚举即可。