Chciałbym serializować niektóre EnumSet<FooType>
do String
przy użyciu metody toString()
.Elegancki sposób deserializacji EnumSet z ciągu
Np .: EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
da [COMMON, MEDIUM]
.
Pytanie dotyczy eleganckiego sposobu deserializacji takiego łańcucha z powrotem na EnumSet<FooSet>
. Szukam jakiejś powszechnie znanej biblioteki (może być jak apache-commons
) lub standardowej klasy Util dla takich rzeczy.
Coś jak: EnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
I zostały wdrożone to coś w taki sposób:
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;
}
Ale może jest gotowe rozwiązanie, albo dramatycznie łatwy sposób to zrobić.
Nie znam takiej bibliotece, a metoda wygląda całkiem dobrze. Prawdopodobnie użyłbym zamiast tego regex (_personal preference_) i wywołałbym metodę 'fromString', aby implikować jej odwrotną relację do' toString' (chociaż konwencja java prawdopodobnie byłaby czymś w stylu 'parseEnumSet'), ale nie znajduję żadnego Wada w tym, co robisz. – Lucas
Serializacja i deserializacja "ręcznie" jest często szybsza i łatwiejsza do debugowania dla prostych struktur, ale zazwyczaj trafia się dość szybko w przypadki narożne: na przykład co się stanie, jeśli jeden z twoich wyliczeń zawiera przecinek ','? Następnie musisz zacząć od przecinków i komplikować swoje wyrażenie regularne, itd .. –