動機: いくつかの値のファミリーのすべての可能な値を表す列挙型を作成したいと思います (ここで「クラス」と言うのを躊躇します)。列挙型には、追加のメソッド、フィールドがあり、おそらく他のインターフェイスを実装することさえあります。次に、この列挙型を別のメソッドに渡したいと思います。そこで、可能なすべての値を反復処理します (使用Enum.values()
していくつかの作業を行います.
調査したところ、enumFoo
が実際に になることがわかりましたFoo extends Enum<Foo>
。これが列挙型を拡張できない理由です。メソッドの引数を次のように定義しようとしました。
myMethod(Class<?> bar) {...}
myMethod(Class<? extends Enum> bar) {...}
myMethod(Class<? extends Enum<?>> bar) {...}
しかし、メソッド内で次のような基本的なことを試してみると:
int i = bar.values().length;
それは失敗します。これを行う(またはこれを行う必要を回避する)他の方法はありますか?
注: 列挙型の実際のインスタンスを渡して、bar.getDeclaringClass()
(インスタンスではなく) 列挙型クラスを見つけるために使用することもできますが、これはかなり醜いです。