为什么说在java中使用枚举更好。如果你有不同数据类型的常量,我认为最好使用带常量的类而不是枚举?
喜欢
Class A {
public static int A = 1;
public static int B = 2;
public static String c = "RADIUS";
public static String d = "LENGTH";
}
而不是
enum ofInts {A(1), B(2)}
enum ofStrings{c("RADUIS"), d("LENGTH")}
答案 0 :(得分:7)
使用枚举的一个好处是它是强类型的。考虑两组常量,两者都有整数表示。如果您只是按照您的建议使用字段,那么没有什么可以阻止您将错误的值传递给方法等。如果使用枚举,则不能 - 两组常量完全不同,即使它们共享“具有基础整数表示的值”的常见方面。
当然,枚举提供了额外的好处,允许您包含值的行为,但这并不总是必要的 - 即使它不是,这并不意味着枚举没用。
答案 1 :(得分:1)
回答你的标题隐含的问题我们应该在不同数据类型的java中使用Enums吗?我必须回答一个响亮的没有,因为实际上你不能。枚举有自己的数据类型,每个enum
本质上都是一种新的数据类型。这是他们最大的权力之一 - 他们可以在编译时进行强类型检查。
你的问题的主体有点不公平 - 首先你永远不会考虑用枚举替换非决赛,所以让我们假装你发布:
class A {
public static final int A = 1;
public static final int B = 2;
public static final String c = "RADIUS";
public static final String d = "LENGTH";
}
我也可以对你的命名采取一些自由,使样本更加真实:
class A {
public static final int ONE = 1;
public static final int TWO = 2;
public static final String RADIUS = "RADIUS";
public static final String LENGTH = "LENGTH";
}
现在 - 自然地转换为enum
:
class A {
enum Number {
ZERO,
ONE,
TWO;
}
enum Measure {
RADIUS,
LENGTH,
WEIGHT;
}
}
我已经添加了更多值来证明由此产生的多功能性。
答案 2 :(得分:0)
通常,如果需要不同类型的枚举,则只需实现不同的枚举类型。具有int常量的类的不安全模式不被认为是好的风格(由于固有的不安全性)。
另一种选择可能是由Joshua Bloch发布的所谓的类型安全枚举模式。作为变体,您甚至可以构建类型层次结构。但这不适合初学者。例如,关于序列化,您需要特殊操作(使用readResolve-method)。
因此标准枚举非常易于使用且安全。
答案 3 :(得分:0)
枚举类型一方面使代码更加自我记录。根据语言的不同,编译器可以自动为枚举器分配默认值,从而隐藏程序员不必要的细节。这些值甚至可能对程序员不可见(封装)。
枚举的股票价值为0,1,2,3 ... N -1,N因此可以根据各自的位置进行参考。
Java和其他语言中的枚举类型也可以阻止程序员编写不合逻辑的代码,例如对枚举器的值执行数学运算。它更有条理。