先日、Strategyのインスタンスをenumで扱うで取り上げたようにJavaのenumはメソッドを宣言することができます。JavaSE5.0でenumを追加する際、既存の型システムを利用して作られているため、Javaのenumはクラスなのです。 このenumの親クラスとなるのがjava.lang.Enumクラスなのですが、宣言が変わっていて、ジェネリクスの型パラメータが自身の拡張なのですね。 Enum<E extends Enum<E>> これと同じような構造を持つクラスを作った場合、型安全にインスタンス化できません。 public class Hoge<H extends Hoge<H>> { public static void main(String[] args) { Hoge<Hoge<Hoge<...>>> hoge = new Hoge<Hoge<Hoge<...>>>()