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

ワイルドカードを使った方がかっこいいかも。
追記
と思ったけどワイルドカード使ったときと使わないときの違いがわからなくなってきた...

public enum Hoge {

	FOO {

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

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

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

	public static interface HogeSwitch<T> {

		T foo();

		T bar();
	}

}