メソッドを使用してEnumSet<FooType>
からString
にシリアル化したいと思います。EnumSetをStringから逆シリアル化するためのエレガントな方法
例:EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
は[COMMON, MEDIUM]
となります。
質問は、このような文字列をデシリアライズしてEnumSet<FooSet>
に返すエレガントな方法です。私はいくつかの一般的に知られているライブラリ(apache-commons
のような)またはそのようなもののための標準のUtilクラスを探しています。
ような何か:
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;
}
しかし、これを行うための準備ができて解決策、または劇的に簡単な方法があるかもしれ:私は、このような方法で、この事を実装しましたEnumSetUtil.valueOf(FooType.class, "[COMMON, MEDIUM]")
。
を私はそのようなライブラリを知っている、とあなたの方法はかなりよさそうです。私はおそらくregex(_personal preference_)を代わりに使用し、 'fromString'メソッドを呼び出して' toString'との逆の関係を暗示します(ただし、javaの規約は 'parseEnumSet'のようなものです)。しかし、あなたがしていることに欠陥があります。 – Lucas
"手作業で"シリアライズしてデシリアライズすると、単純な構造ではデバッグが速くて簡単になることがよくありますが、通常は非常に高速です。例えば、enumにカンマ '、'が含まれているとどうなりますか?その後、コンマをエスケープし、正規表現などを複雑にする必要があります。 –