Groß- / Kleinschreibung bei der Übereinstimmung einer Zeichenfolge mit einer Java-Enumeration

Java bietet eine valueOf() Methode für jeden Enum<T> Objekt, um so eine enum wie

public enum Day {
  Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

kann man eine lookup wie

Day day = Day.valueOf("Monday");

Wenn die Zeichenfolge übergeben, um valueOf() nicht übereinstimmt (case sensitive) ein bestehendes Day Wert, ein IllegalArgumentException geworfen wird.

Dazu eine case-insensitive matching, die man schreiben kann eine benutzerdefinierte Methode innerhalb der Day enum, z.B.

public static Day lookup(String day) {
  for (Day d : Day.values()) {
    if (d.name().equalsIgnoreCase(day)) {
      return type;
    }
  }
  return null;
}

Gibt es eine generische Art und Weise, ohne die Verwendung von Zwischenspeicherung der Werte oder andere zusätzliche Objekte, zu schreiben, eine statische lookup() Methode wie oben, nur einmal (D. H., nicht für jede enum), gegeben, dass die values() Methode wird implizit Hinzugefügt, um die Enum<E> Klasse zur compile-Zeit?

Die Signatur von einem solchen "generischen" lookup() Methode wäre ähnlich der Enum.valueOf() - Methode, D. H.:

public static <T extends Enum<T>> T lookup(Class<T> enumType, String name);

und es würde implementieren, die genau die Funktionalität des Day.lookup() - Methode für alle enum, ohne die Notwendigkeit zu re-schreiben die gleiche Methode, die für jeden enum.

Kommentar zu dem Problem - Öffnen
Ich bin sicher, dass Sie es wissen, aber der Grund, warum das Problem überhaupt erschienen ist, dass Sie don ' T-stick auf die Java-enum-Namenskonvention. Wenn Sie wurden mit standard-Großbuchstaben benennen, würden Sie benutzen Sie einfach - Tag.valueOf(day.toUpperCase()) in Ihrem lookup-Methode Kommentarautor: kiedysktos
Nein, die gleiche Anforderung gilt unabhängig davon, Fall oder anderen Namenskonventionen. Eine gemeinsame Methode für alle Zwecke, war die Anforderung. 🙂 Kommentarautor: PNS

InformationsquelleAutor der Frage PNS | 2015-02-04

Schreibe einen Kommentar