共通のインターフェースを拡張する列挙型のコレクションを作成しようとしているので、次のようになります。
interface Fooable
{
void someCommonMethod();
}
enum E1 implements Fooable
{
// some enumuerations and a definition for someCommonMethod()
}
enum E2 implements Fooable
{
// some different enumerations and a different definition for someCommonMethod()
}
次に、変数が列挙型であり、インターフェイスを実装することを強制することにより、これを他の場所で利用します。だからの線に沿って何か..
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
fe.someCommonMethod();
}
ただし、これまでのところ、インターフェイスを実装するものとして扱うには、feをキャストする必要があるようです。
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
((Fooable)fe).someCommonMethod();
}
これは安全なはずですが...それは最適ではないようで、何かを見落としている可能性があります。もちろん、パラメータをFooableとして渡そうとすると、キャストして列挙型として処理することになります。これだけでなく、今では安全でもありません。以下を参照してください。
bar(Fooable fe)
{
// potentially unsafe cast!
((Enum<?>)fe).ordinal();
fe.someCommonMethod();
}
私が見落としているものはありますか、それとも
Enum<? extends Fooable>
私が得るのと同じくらい「良い」解決策に近いですか?
私はJavaに比較的慣れておらず、CやC ++のように使用しようとしていることに気付いているので、のこぎりではなくハンマーのように扱ったり、ばかげた単純なものを見落としたりする場合は、遠慮なく指摘してください:)