Подтвердить что ты не робот

Исключение исключения или возврат значения null с помощью оператора 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

4b9b3361

Ответ 1

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

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

Ответ 2

Я думаю, что throw new IllegalArgumentException("Something strange happend") - лучшая оценка.

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

И вы знаете: clear errors = лучше развиваться.

Ответ 3

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

Ответ 4

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