2010-10-19 3 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

+1

В названии. Я думаю, он хочет знать, почему он должен использовать 'enum' вместо' interface' для определения констант ... – romaintaz

ответ

17

Представьте себе эти подписи два метода:

void rawF(char someFlag); 

void enumF(MyFlags someFlag); 

последний является более ограничительным, так как допускаются только допустимые значения MyFlags. В первом случае любой символ может быть отправлен - даже если используются только значения, определенные в «константах».

Счастливое кодирование.

1

Вы можете передать MY_A_CONST любому методу, который принимает символ. Вы также можете передать любой другой символ методу, который принимает символ.

Вы можете передать Ready, OutOfToner, Offline и null в метод, который использует PrinterState.

Вы получаете безопасность, поскольку можете ограничить общий набор значений, которые могут быть переданы методу (или назначены переменной).

1

Использование enum над константами помогает с безопасностью типа, потому что если функция принимает перечисление, и вы передаете ему что-либо, кроме перечисления, компилятор будет жаловаться. С константами вы принимаете довольно большой диапазон данных, большинство из которых являются недопустимыми.

Смежные вопросы