Ответ 1
Выбросьте исключение, так как это исключительный случай.
И выбросьте его за пределы switch
, это будет более читаемо. В противном случае это звучит как "случай по умолчанию является исключительным".
Итак, у меня есть функция, которая форматирует дату, чтобы принудить к указанному перечислению DateType {CURRENT, START, END} что было бы лучшим способом обработки возвращаемого значения в случаях, когда используется оператор switch
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
default:throw new ("Something strange happend");
}
}
ИЛИ выкинуть эксклюзию в конце
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
//It will never reach here, just to make compiler happy
throw new IllegalArgumentException("Something strange happend");
}
ИЛИ вернуть null
public static String format(Date date, DateType datetype) {
..validation checks
switch(datetype){
case CURRENT:{
return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss");
}
...
}
return null;
}
Какая была бы лучшая практика здесь? Также все значения перечисления будут обрабатываться в случае case
Выбросьте исключение, так как это исключительный случай.
И выбросьте его за пределы switch
, это будет более читаемо. В противном случае это звучит как "случай по умолчанию является исключительным".
Я думаю, что throw new IllegalArgumentException("Something strange happend")
- лучшая оценка.
Использование null
просто предположительно приведет к NullPointerException
где-нибудь, когда вы используете возвращаемое значение, но оно будет менее информативным, чем создание конкретного исключения, описывающего проблему!
И вы знаете: clear errors = лучше развиваться.
Я бы пошел с первым подходом (но с IllegalArgumentException
как в вашем втором подходе). Вы должны включить инструкцию по умолчанию для защиты от случаев, когда кто-то модифицирует (расширяет) ваш перечисление. Помещение исключения в оператор по умолчанию позволяет читателю понять, что код никогда не должен проходить мимо оператора switch. В противном случае они должны были бы проверить, действительно ли все переменные перечислены в коммутаторе.
Исключения, так как вы можете больше подчиняться родительскому элементу, чем один возвращаемый int. Обычно вы используете Исключения, где они существуют (С++), и возвращают значения, а не (C).