在我们的示例中,我们可以选择定义一个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';
答案 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
超过常量有助于类型安全,因为如果函数采用枚举并且除了枚举之外都传递它,编译器会抱怨。对于常量,您接受的是大量数据,其中大部分都是无效的。