Ich möchte einige EnumSet<FooType>
zu String
mit seiner toString()
Methode serialisieren.Eleganter Weg zum Deserialisieren EnumSet von String
Zum Beispiel: EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
ergibt [COMMON, MEDIUM]
.
Die Frage ist über elegante Möglichkeit, solche Schnur wieder zu der EnumSet<FooSet>
deserialize. Ich suche nach einer allgemein bekannten Bibliothek (kann wie apache-commons
sein) oder einer Standard-Util-Klasse für solche Dinge.
Etwas wie: EnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
ich diese Sache in einer solchen Art und Weise implementiert haben:
public static <E extends Enum<E>> EnumSet<E> valueOf(Class<E> eClass, String str) {
String[] arr = str.substring(1, str.length() - 1).split(",");
EnumSet<E> set = EnumSet.noneOf(eClass);
for (String e : arr) set.add(E.valueOf(eClass, e.trim()));
return set;
}
Aber kann es fertige Lösung ist, oder dramatisch einfacher Weg, dies zu tun.
Ich kenne keine solche Bibliothek und Ihre Methode sieht ziemlich gut aus. Ich würde wahrscheinlich stattdessen eine Regex (_personal preference_) verwenden, und rufen Sie die Methode 'fromString', um seine inverse Beziehung zu toString implizieren (obwohl die Java-Konvention wäre wahrscheinlich so etwas wie' parseEnumSet'), aber ich finde keine Fehler in dem, was Sie tun. – Lucas
Serialisierung und Deserialisierung "von Hand" ist oft schneller und einfacher zu debuggen für einfache Strukturen, aber Sie treffen in der Regel ziemlich schnell die Ecke Fällen: zum Beispiel, was passiert, wenn ein Enum ein Komma enthält, '? Dann müssen Sie beginnen Kommas zu entkommen und Ihre Regex, etc .. komplizieren. –