在我們的例子中,我們可以選擇定義枚舉類型,這將限制可能分配的值(即改良型安全):爲什麼Enum認爲比常量更安全?
public class OfficePrinter {
public enum PrinterState { Ready, OutOfToner, Offline };
public static final PrinterState STATE = PrinterState.Ready;
}
static final char MY_A_CONST = 'a';
在我們的例子中,我們可以選擇定義枚舉類型,這將限制可能分配的值(即改良型安全):爲什麼Enum認爲比常量更安全?
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的方法。
您可以將Ready,OutOfToner,Offline和null傳遞給採用PrinterState的方法。
通過能夠限制可傳遞給方法(或分配給變量)的值的總集合,您可以獲得安全性。
在常量上使用enum
有助於提高類型安全性,因爲如果某個函數接受一個枚舉,並且只傳遞了一個枚舉,那麼編譯器會發出抱怨。使用常量,您接受的數據量相當大,其中大部分數據都是無效的。
問題在哪裏? – delnan 2010-10-19 21:01:07
在標題中。我想他想知道爲什麼他必須使用'enum'而不是'interface'來定義常量...... – romaintaz 2010-10-19 21:04:10