Je voudrais sérialiser certains EnumSet<FooType>
à String
en utilisant sa méthode toString()
.Manière élégante de désérialiser EnumSet à partir de la chaîne
E.g .: EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
donnera [COMMON, MEDIUM]
.
La question est sur la façon élégante de désérialiser une telle chaîne de retour à la EnumSet<FooSet>
. Je cherche une bibliothèque communément connue (peut être comme apache-commons
) ou une classe Util standard pour de telles choses.
Quelque chose comme: EnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
J'ai mis cette chose de telle façon:
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;
}
Mais, peut-être il y a une solution prête, ou une façon spectaculaire facile pour ce faire.
Je ne connais pas cette bibliothèque, et votre méthode semble assez bon. J'utiliserais probablement une regex (_personal preference_) à la place, et j'appellerais la méthode 'fromString' pour impliquer sa relation inverse à' toString' (bien que la convention de Java soit probablement quelque chose comme 'parseEnumSet'), mais je ne trouve aucun défaut dans ce que vous faites. – Lucas
Sérialiser et désérialiser "à la main" est souvent plus rapide et plus facile à déboguer pour des structures simples mais vous frappez généralement très vite les cas de coin: par exemple, que se passe-t-il si l'un de vos énumérations contient une virgule ','? Ensuite, vous devrez commencer à échapper des virgules et compliquer votre regex, etc. –