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]?
感谢。
答案 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枚举即可。