Я хотел бы сериализовать некоторую EnumSet<FooType>
в String
, используя ее метод toString()
.Элегантный способ десериализации EnumSet из строки
E.g .: EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
даст [COMMON, MEDIUM]
.
Вопрос об элегантном способе десериализации такой строки обратно на EnumSet<FooSet>
. Я ищу какую-то общеизвестную библиотеку (может быть как apache-commons
) или стандартный класс Util для таких вещей.
Что-то вроде: EnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
Я реализовал эту вещь таким образом:
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;
}
Но, может быть есть готовое решение, или драматически простой способ сделать это.
Я не знаю такой библиотеки, и ваш метод выглядит довольно хорошо. Вместо этого я бы использовал регулярное выражение (_personal preference_) и вызывать метод 'fromString', чтобы подразумевать его обратную связь с' toString' (хотя соглашение java, скорее всего, будет похоже на 'parseEnumSet'), но я не нахожу недостаток в том, что вы делаете. – Lucas
Сериализация и десериализация «вручную» часто бывают быстрее и проще отладки для простых структур, но вы обычно довольно быстро набираете угловые случаи: например, что происходит, если один из ваших перечислений содержит запятую ','? Затем вам нужно будет начать сбрасывать запятые и усложнять регулярное выражение и т. Д. –