Эффективность Java Enum.valueOf (), когда значение не существует

Что бы вы сочли более эффективным?

Использование «WeekDay» является лишь примером:

public enum WeekDay {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}

Прокрутите и проверьте сначала строку дня:

public void parseString(String line) {
    String[] tokens = line.split();
    String day = tokens[1]; // day 'should' always be a weekday
    if (isValidWeekDay(day)) {
        WeekDay weekDay = WeekDay.valueOf(day); // won't throw exception
        ...
    } else {
        throw new InvalidWeekDayException(day); // subclass of RuntimeException
    }
}
private boolean isValidWeekDay(String day) {
    for (WeekDay weekDay : WeekDay.values()) {
        if(weekDay.toString().equals(day))
           return true;
    }
    return false;
}

Или, поскольку в 99,99% случаев день будет правильным:

public void parseString(String line) {
    String[] tokens = line.split();
    String day = tokens[1]; // day 'should' always be a weekday
    try {
        WeekDay weekDay = WeekDay.valueOf(day); // might throw exception
        ...
    } catch (IllegalArgumentException e) {
        throw new InvalidWeekDayException(day, e);
    }
}

Обновление :

Чтобы уточнить, строка ввода будет поступать от клиентского приложения, а не от пользователя. Другими словами, в этом примере было бы ошибкой получить нерабочий день.

10
задан antak 9 April 2019 в 02:07
поделиться