JavaEE勉強会で小林さんが書いたコード(Enumに対するVisitorパターン)

ぼくのPCに入っているのでコピペしときます。
どういう文脈でこのコードがでてきたかというと、JPAの継承戦略つかわなくてもEnumEntityごと同一Entityクラスのインスタンスごとに処理を振り分けられるよね、という話題からです。

public enum Hoge {

    FOO {

        public void accept(HogeSwitch sw) {
            sw.foo();
        }
    },
    BAR {

        public void accept(HogeSwitch sw) {
            sw.bar();
        }
    };

    public abstract void accept(HogeSwitch sw);

    public interface HogeSwitch {

        void foo();

        void bar();
    }

}