为了账号安全,请及时绑定邮箱和手机立即绑定

Java枚举与具有公共静态最终字段的类相比有什么优势?

Java枚举与具有公共静态最终字段的类相比有什么优势?

噜噜哒 2019-08-15 17:11:35
Java枚举与具有公共静态最终字段的类相比有什么优势?我对C#非常熟悉,但开始在Java中工作更多。我希望得知Java中的枚举基本上与C#中的枚举相同,但显然情况并非如此。最初,我很高兴得知Java枚举可以包含多个数据,这看起来非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。然而,从那时起我发现C#中缺少很多功能,例如能够轻松地为枚举元素分配特定值,从而能够在没有相当大努力的情况下将整数转换为枚举(即整数值转换为相匹配的Java枚举)。所以我的问题是:对于带有一堆公共静态最终字段的类,Java枚举是否有任何好处?或者它只提供更紧凑的语法?编辑:让我更清楚。Java枚举对于具有相同类型的一组公共静态最终字段的类有什么好处?例如,在第一个链接的行星示例中,枚举对具有这些公共常量的类有什么好处:public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);据我所知,卡萨布兰卡的答案是唯一能满足这一要求的人。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

从技术上讲,人们确实可以将枚举视为一个带有一堆类型常量的类,这实际上是如何在内部实现枚举常量。enum然而,使用a 为您提供了有用的方法(Enum javadoc),否则您必须自己实现,例如Enum.valueOf


查看完整回答
反对 回复 2019-08-15
?
皈依舞

TA贡献1851条经验 获得超3个赞

  1. 类型安全和价值安全。

  2. 保证单身。

  3. 能够定义和覆盖方法。

  4. 能够在没有限定条件的switch语句中使用值case

  5. 通过内置的值序列化 ordinal().

  6. 按名称而不是按值进行序列化,这提供了一定程度的面向未来。

  7. EnumSetEnumMap课程。


查看完整回答
反对 回复 2019-08-15
?
jeck猫

TA贡献1909条经验 获得超7个赞

没有人提到在switch陈述中使用它们的能力; 我也会把它扔进去。

这允许以干净的方式使用任意复杂的枚举,而不使用instanceof可能混淆的if序列或非字符串/ int切换值。规范示例是状态机。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 1016 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信