我想使用它的toString()
方法序列化一些EnumSet<FooType>
到String
。從字符串反序列化EnumSet的優雅方法
例如: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
「手動」序列化和反序列化對於簡單的結構來說通常更快,更容易調試,但是通常您會碰到相當快的角落情況:例如,如果一個枚舉包含逗號'','會發生什麼?那麼你將需要開始轉義逗號和複雜的正則表達式等。 –