为什么Enum被认为比常量更安全?

时间:2010-10-19 20:58:30

标签: java enums type-safety

在我们的示例中,我们可以选择定义一个Enumerated Type来限制可能的指定值(即改进的类型安全性):

public class OfficePrinter {

public enum PrinterState { Ready, OutOfToner, Offline };
public static final PrinterState STATE = PrinterState.Ready;
}

static final char MY_A_CONST = 'a';

3 个答案:

答案 0 :(得分:17)

想象一下这两个方法签名:

void rawF(char someFlag);

void enumF(MyFlags someFlag);

后者更具限制性,因为只允许MyFlags的有效值。在前一种情况下,任何字符都可以传递 - 即使只使用了“常量”中定义的值。

快乐的编码。

答案 1 :(得分:1)

您可以将MY_A_CONST传递给任何带char的方法。您还可以将任何其他char传递给带有char的方法。

您可以将Ready,OutOfToner,Offline和null传递给采用PrinterState的方法。

通过限制可传递给方法(或分配给变量)的值的总值,您可以获得安全性。

答案 2 :(得分:1)

使用enum超过常量有助于类型安全,因为如果函数采用枚举并且除了枚举之外都传递它,编译器会抱怨。对于常量,您接受的是大量数据,其中大部分都是无效的。