EnumSet<FooType>
을 메서드를 사용하여 String
으로 serialize하고자합니다.String에서 EnumSet을 비 직렬화하는 우아한 방법
예 : EnumSet.of(FooType.COMMON, FooType.MEDIUM).toString()
은 [COMMON, MEDIUM]
입니다.
질문은 EnumSet<FooSet>
등의 문자열을 역 직렬화하는 우아한 방법에 관한 것입니다. 나는 일반적으로 알려진 라이브러리 (apache-commons
과 같을 수도 있음) 나 그런 것들을위한 표준 Util-class를 찾고있다. 같은
뭔가 : 나는 그런 방식으로이 일을 구현했습니다 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
"손으로"직렬화 및 직렬화를 해제하는 것은 종종 간단한 구조에 대해 디버깅하는 것이 더 빠르며 더 쉽게 수행 할 수 있습니다. 그러나 일반적으로 구석의 경우에 매우 빠르게 충돌합니다. 예를 들어 열거 형에 쉼표가 있으면 어떻게됩니까? 다음 쉼표를 이스케이프 시작하고 정규식 등 복잡하게 시작해야합니다. –