Enumに対するVisitorパターン(Generics対応)

昨日のコードをGenericsに対応させてみました。
これで任意の型を返せます。
戻り値を返したくない場合はHogeSwitchにVoid型を渡すことになると思います、たぶん。

public enum Hoge {

	FOO {

		public <T> T accept(HogeSwitch<T> sw) {
			return sw.foo();
		}
	},
	BAR {

		public <T> T accept(HogeSwitch<T> sw) {
			return sw.bar();
		}
	};

	public abstract <T> T accept(HogeSwitch<T> sw);

	public static interface HogeSwitch<T> {

		T foo();

		T bar();
	}

}