StringからEnumへ。

katzchang

基本的にはその通り、あまりスマートな方法はないようです。
valueをキーとしたDummyEnumを持つようなprivate static Mapを用意して逆変換させるとか、もしくはEnumUtilクラス的な何かを用意するとか。
ただ、例示の場合に限れば、DummyEnum.COL1 ではなく、DummyEnum.col1 という名前で定義した方がいいと思います。定数であるという言語的性質より、名前そのものが重要だという解釈です。

Horiuchi_H

さらに補足。
この場合ならば、DummyEnum.col1 と定義されていれば、Enum#name() と Enum$valueOf(String) で相互変換可能ですね。

2008-09-20 - 思い悩むblog 改め Buriに片思い日記


ありがたい事にご指摘をいただけました。

後だしで申し訳ない感じですが、基本はCOL1("col1_xxx")として使おうと考えていたので、staticなMapを使ってみました。

public class EnumTest {

	@Test
	public void test1() {
		DummyEnum e = DummyEnum.COL1;
		assertEquals("col1", e.toString());
	}
	@Test
	public void test2() {
		DummyEnum e = DummyEnum.get("col2");
		assertEquals("col2", e.toString());
	}
	enum DummyEnum {
		COL1("col1"),
		COL2("col2");
		private static Map<String, DummyEnum> _map;
		static {
			_map = new HashMap<String, DummyEnum>();
			DummyEnum[] items = DummyEnum.values();
			for (DummyEnum item: items) {
				_map.put(item.toString(), item);
			}
		}
		private String value;
		DummyEnum(String value) {
			this.value = value;
		}
		public String toString() {
			return this.value;
		}
		public static DummyEnum get(String value) {
			return _map.get(value);
		}
	}
}

という事で良いのかな?