在我们的示例中,我们可以选择定义一个 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';
在我们的示例中,我们可以选择定义一个 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';
想象一下这两个方法签名:
void rawF(char someFlag);
void enumF(MyFlags someFlag);
后者更具限制性,因为只允许 的有效值MyFlags
。在前一种情况下,可以传递任何字符——即使只有在使用的“常量”中定义的值。
快乐编码。
您可以将 MY_A_CONST 传递给任何采用 char 的方法。您还可以将任何其他 char 传递给采用 char 的方法。
您可以将 Ready、OutOfToner、Offline 和 null 传递给采用 PrinterState 的方法。
您可以通过限制可以传递给方法(或分配给变量)的总值集来获得安全性。
使用enum
over 常量有助于类型安全,因为如果一个函数接受一个枚举并且你传递它而不是枚举,编译器会抱怨。使用常量,您接受的数据范围相当大,其中大部分是无效的。