Для людей, предлагающих бросать исключение:
Выбрасывание исключения не дает мне ошибки времени компиляции, это дает мне ошибку времени выполнения. Я знаю, что могу исключить исключение, лучше умереть во время компиляции, чем во время выполнения.
Вначале я использую eclipse 3.4.
У меня есть модель данных, которая имеет свойство mode, которое является Enum.
enum Mode {on(...), off(...), standby(...); ...}
В настоящее время я пишу представление этой модели, и у меня есть код
...
switch(model.getMode()) {
case on:
return getOnColor();
case off:
return getOffColor();
case standby:
return getStandbyColor();
}
...
Я получаю сообщение об ошибке "Этот метод должен возвращать результат типа java.awt.Color", потому что у меня нет случая по умолчанию и нет возврата xxx в конце функции. Я хочу ошибку компиляции в случае, когда кто-то добавляет другой тип в перечисление (например, shuttingdown), поэтому я не хочу ставить случай по умолчанию, который генерирует AssertionError, поскольку он будет компилироваться с измененным режимом и не будет как ошибка до выполнения.
Мой вопрос таков:
Почему EclipseBuilder (и javac) не признает, что этот переключатель охватывает все возможности (или охватывает их?) И перестает предупреждать меня о необходимости возврата типа. Есть ли способ сделать то, что я хочу, не добавляя методы в режим?
Если это не так, существует ли опция предупреждения/ошибки в операторах switch, которые не охватывают все возможные значения Enum?
Изменить: Роб: Это ошибка компиляции. Я просто попытался скомпилировать его с помощью javac, и я получаю сообщение об ошибке "missing return statement", нацеленное на последний метод. Eclispe просто помещает ошибку в начало метода.