2010-10-19 40 views
3

在我們的例子中,我們可以選擇定義枚舉類型,這將限制可能分配的值(即改良型安全):爲什麼Enum認爲比常量更安全?

public class OfficePrinter { 

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

static final char MY_A_CONST = 'a'; 
+1

問題在哪裏? – delnan 2010-10-19 21:01:07

+1

在標題中。我想他想知道爲什麼他必須使用'enum'而不是'interface'來定義常量...... – romaintaz 2010-10-19 21:04:10

回答

17

試想一下這兩個方法簽名:

void rawF(char someFlag); 

void enumF(MyFlags someFlag); 

的後者更具限制性,因爲只允許有效值MyFlags。在前一種情況下,任何字符都可以通過 - 即使只有使用「常數」中定義的值。

快樂編碼。

1

您可以將MY_A_CONST傳遞給任何採用字符的方法。你也可以將其他字符傳遞給一個接受char的方法。

您可以將Ready,OutOfToner,Offline和null傳遞給採用PrinterState的方法。

通過能夠限制可傳遞給方法(或分配給變量)的值的總集合,您可以獲得安全性。

1

在常量上使用enum有助於提高類型安全性,因爲如果某個函數接受一個枚舉,並且只傳遞了一個枚舉,那麼編譯器會發出抱怨。使用常量,您接受的數據量相當大,其中大部分數據都是無效的。

相關問題