Таким образом, у меня есть функция, которая форматирует дату, чтобы принудить к данному перечислимому DateType {ТЕКУЩИЙ, ЗАПУСТИТЬ, КОНЕЦ}, что было бы лучшим способом к обработке возвращаемого значения со случаями тот оператор переключения использования
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");
}
ИЛИ возвратите пустой указатель
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;
}
Какова была бы лучшая практика здесь? Также все перечислимые значения будут обработаны в операторе выбора
Выбросить исключение, поскольку это исключительный случай.
И выбросить его вне switch
, это было бы более читабельно. Иначе это звучит как "случай по умолчанию является исключительным".
Я думаю, что выбрасывает новое исключение IllegalArgumentException ("Что-то странное случилось" )
- лучшая практика.
Использование null
просто предположительно вызовет NullPointerException
где-то, когда вы используете возвращаемое значение, но это будет менее информативным , чем создание определенного исключения, описывающего проблема!
И вы знаете: явные ошибки = лучшее развитие.
Исключения, так как вы можете подчиняться родительскому элементу больше, чем один возвратный int. Обычно используются исключения там, где они существуют (C++), и возвращаются значения там, где их нет (C).
Я бы выбрал первый подход (но с IllegalArgumentException
как во втором подходе) . Вы должны включить оператор по умолчанию для защиты от случаев, когда кто-то изменяет (расширяет) ваше перечисление. Помещение исключения в оператор по умолчанию дает понять читателю, что код никогда не должен проходить мимо оператора switch. В противном случае им пришлось бы проверить, действительно ли все значения перечисления находятся в переключателе.