Die Java-Enum.valueOf () - Effizienz, wenn Wert nicht vorhanden

Welche halten Sie für effizienter?

Den Einsatz von 'Wochentag' ist nur ein Beispiel:

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

Schleife durch, und überprüfen Sie, Tag string first:

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;
}

Oder da in 99,99% der Fälle, der Tag wird richtig sein:

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);
    }
}

Update:

Zu klären, wird der input-string wird aus einer client-Anwendung, sondern als ein Benutzer. Also in anderen Worten, es wäre ein Fehler zu erhalten, die eine nicht-Arbeitstag in diesem Beispiel.

  • Es klingt nach einer spaßigen Antwort, aber ich würde überlegen, die eine, die lief am schnellsten, wenn ich profiliert es die effizienteste sein.
  • Der String kommt von etwas, das ein Benutzer eingibt, oder ist es immer von intern?
  • Ich würde diese stattdessen zu verwenden, wenn Sie wirklich tun, eine enum-Tage der Woche : joda-time.sourceforge.net/field.html#dayOfWeek
  • Dank NimChimpsky - jedoch, dies ist nur ein einfaches Beispiel. Meine tatsächlichen enum-Domäne ist spezifisch....
  • Warum fangen die IllegalArgumentException überhaupt, ob es einen Fehler bei der Programmierung? IllegalArgumentException ist genau das, was ich erwarten würde, wenn ich fragte eine utility-Methode zum analysieren von Daten mit illegalem, dass ich mich übergeben.
  • Dank Mark - geklärt, die eigentliche Logik in meinem code...
  • die Schleife macht nichts, was nicht valueof
  • gute Antwort, in dem Fall die zweite Methode, die exception zu fangen würde Profil besser, da in 99,99% der Fälle wird die Zeichenfolge gültig ist.
  • die manuelle loop-und valueOf sind nicht gleichwertig. Daher meine Frage.
  • wie unterscheiden Sie sich ? Sie werfen InvalidWeekDayException, wenn der input-string ist nicht ein Tag in der Woche, in Großbuchstaben, in beiden Fällen.
  • man wirft eine Ausnahme, die anderen nicht. Ich denke, es ist eine Frage, ob das werfen/fangen/retrhrowing ist effizienter als testen/werfen...
  • Kam hier wollen zu wissen die Effizienz von Enum.valueOf() für das nachschlagen von Werten, aber diese Frage ist mehr über die Kosten der valueOf() findet und abfangen von Ausnahmen. Ich habe aktualisiert die Titel zu reflektieren. Für alle Fragen, die Antworten auf die erstere Art von gefunden in stackoverflow.com/questions/7164906#7165270 und die stackoverflow.com/questions/24254250#24254758
  • Was Bruchteil des Programms ist diese enum-lookup? Es ist schwer zu glauben, dass diese machen einen messbaren Unterschied für das gesamte Programm.

InformationsquelleAutor toolkit | 2011-08-23
Schreibe einen Kommentar