Для людей, предлагающих бросить исключение:
Создание исключения не дает мне ошибки во время компиляции, оно дает мне ошибку времени выполнения. Я знаю, что могу выдать исключение, я лучше умру во время компиляции, чем во время выполнения.
Во-первых, я использую затмение 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 в конце функции.
Я хочу ошибка компиляции в случае, когда кто-то добавляет другой тип в перечисление (например, завершение работы), поэтому я не хочу ставить регистр по умолчанию, который выдает AssertionError, так как это будет компилироваться измененный режим и не будет рассматриваться как ошибка до времени выполнения.
У меня такой вопрос:
Почему EclipseBuilder (и javac) не распознают, что этот переключатель охватывает все возможности (или охватывает их?), И перестают предупреждать меня о необходимости типа возврата. Есть ли способ сделать то, что я хочу, без добавления методов в Mode?
Если это не так, есть ли возможность предупреждения / ошибки в операторах switch, которые не охватывают все возможные значения Enum?
Edit:
Роб: Это ошибка компиляции . Я только что попытался скомпилировать его с помощью javac, и у меня появляется ошибка «пропущенный оператор возврата», нацеленная на последний метод}. Eclispe просто помещает ошибку в начало метода.