首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取枚举值的枚举定义?

如何获取枚举值的枚举定义?
EN

Stack Overflow用户
提问于 2010-01-20 18:48:16
回答 3查看 3.3K关注 0票数 3
代码语言:javascript
运行
复制
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?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-21 00:11:29

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

代码语言:javascript
运行
复制
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中),那么您也不能进行相等检查!

票数 7
EN

Stack Overflow用户

发布于 2010-01-21 08:08:43

由于您提到的限制,我将发布一个指向我编写的枚举类型的链接。我没有使用内置枚举类型,因为我发现它非常有限。尽管它没有您想要的功能(从元素获取枚举),但添加它将非常简单。如果你觉得它有用,你可以以任何方式使用它。

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

顺便说一句,如果您喜欢并希望获得有关将容器添加到EnumElement的帮助,请让我知道。

票数 2
EN

Stack Overflow用户

发布于 2010-01-22 04:46:31

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2100730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档