Выдача исключения по сравнению с возвращением нулевого значения с оператором переключения

Таким образом, у меня есть функция, которая форматирует дату, чтобы принудить к данному перечислимому 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;   
}

Какова была бы лучшая практика здесь? Также все перечислимые значения будут обработаны в операторе выбора

18
задан Yacoby 2 April 2010 в 17:01
поделиться

4 ответа

Выбросить исключение, поскольку это исключительный случай.

И выбросить его вне switch, это было бы более читабельно. Иначе это звучит как "случай по умолчанию является исключительным".

22
ответ дан 30 November 2019 в 07:17
поделиться

Я думаю, что выбрасывает новое исключение IllegalArgumentException ("Что-то странное случилось" ) - лучшая практика.

Использование null просто предположительно вызовет NullPointerException где-то, когда вы используете возвращаемое значение, но это будет менее информативным , чем создание определенного исключения, описывающего проблема!

И вы знаете: явные ошибки = лучшее развитие.

14
ответ дан 30 November 2019 в 07:17
поделиться

Исключения, так как вы можете подчиняться родительскому элементу больше, чем один возвратный int. Обычно используются исключения там, где они существуют (C++), и возвращаются значения там, где их нет (C).

1
ответ дан 30 November 2019 в 07:17
поделиться

Я бы выбрал первый подход (но с IllegalArgumentException как во втором подходе) . Вы должны включить оператор по умолчанию для защиты от случаев, когда кто-то изменяет (расширяет) ваше перечисление. Помещение исключения в оператор по умолчанию дает понять читателю, что код никогда не должен проходить мимо оператора switch. В противном случае им пришлось бы проверить, действительно ли все значения перечисления находятся в переключателе.

1
ответ дан 30 November 2019 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: