StringからEnumへ。

ここ数日Javaどっぷりです。
cfneo-Projectで使おうと思っているちょっとしたものを作ろうとしているんですが、ここ数年本当にColdFusion漬けだったのでJava5以降のJavaに軽く置いていかれました><

で、早速目をつけたのがTypeSafeEnum。
これ自体はすごく便利だと思うのですが、たとえばこういった時どうすれば良いのか分からなかったです。

public class EnumTest {
	@Test
	public void test1() {
		DummyEnum e = DummyEnum.COL1;
		assertEquals("col1", e.toString());
	}
	@Test
	public void test2() {
		DummyEnum e = DummyEnum.valueOf("col2");
		assertEquals("col2", e.toString());
		// \(^o^)/
	}
	enum DummyEnum {
		COL1("col1"),
		COL2("col2");
		private String value;
		DummyEnum(String value) {
			this.value = value;
		}
		public String toString() {
			return this.value;
		}
	}
}


#test2ですね。
enumから文字列を、というのは上記の通りだと思うのですが、では文字列からenumはどーすんだ?と。

だもんで、以下のようにしてみました。

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 String value;
		DummyEnum(String value) {
			this.value = value;
		}
		public String toString() {
			return this.value;
		}
		public static DummyEnum get(String value) {
			DummyEnum[] enums = DummyEnum.values();
			for (DummyEnum _enum: enums) {
				if (_enum.toString().equals(value)) {
					return _enum;
				}
			}
			return null;
		}
	}
}


ほかに良い方法があるのか不明ですが、とりあえずこうすれば出来ない事はない、という事で。