我对C#非常熟悉,但是开始在Java中工作更多。我希望了解到Java中的枚举基本上与C#中的枚举等效,但显然并非如此。最初,我很高兴得知Java枚举可以包含多条数据,这似乎非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。但是,从那时起,我发现了很多缺少的功能,这些功能在C#中都是微不足道的,例如能够轻松地将枚举元素分配给某个值,从而无需花费大量精力即可将整数转换为枚举的功能(即转换整数值相匹配的Java枚举)。
所以我的问题是:与具有一堆公共静态final字段的类相比,Java枚举对Java枚举有什么好处吗?还是只是提供更紧凑的语法?
编辑:让我更清楚。与具有一堆相同类型的公共static final字段的类相比,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);
据我所知,卡萨布兰卡的答案是唯一可以满足这一要求的答案。
S
,因此现在我们正在谈论的是将它们传递给函数等。我们是否需要类型安全?好吧,不是,但是大多数人认为c风格的“一切都void*
很好”,并且可以阻止错误(特别是如果传递多个enum / string参数!)。还将常量放入其自己的名称空间中,等等。与此相反,仅具有普通变量并没有真正的优势。
int
s时,没有类型安全性,因为可以传递任何值。另一方面,在类型安全方面,有类型的对象与枚举没有什么不同。
public static final
字段,这些字段可以是键入的值,不一定int
是s。