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获取ClassTestEnum?
谢谢。
发布于 2010-01-21 00:11:29
不幸的是,我不认为你可以。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中),那么您也不能进行相等检查!
发布于 2010-01-21 08:08:43
由于您提到的限制,我将发布一个指向我编写的枚举类型的链接。我没有使用内置枚举类型,因为我发现它非常有限。尽管它没有您想要的功能(从元素获取枚举),但添加它将非常简单。如果你觉得它有用,你可以以任何方式使用它。
(来源&测试/示例):http://gist.github.com/282446
顺便说一句,如果您喜欢并希望获得有关将容器添加到EnumElement的帮助,请让我知道。
发布于 2010-01-22 04:46:31
在我看来,对于不处理Scala枚举,有一个简单的解决方案:使用Java enum-s。Scala支持交叉编译已经有一段时间了,只需在Scala源文件夹中添加Java枚举即可。
https://stackoverflow.com/questions/2100730
复制相似问题