перечисление

Я пытаюсь создать набор перечислений, которые расширяют общий интерфейс, поэтому что-то вроде:

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()
}

а затем использовать это в другом месте, устанавливая, что переменная является Enum и реализует интерфейс. Так что что-то вроде..

bar(Enum<? extends Fooable> fe)
{
  fe.ordinal();
  fe.someCommonMethod();
}

Однако до сих пор мне, кажется, приходилось приводить fe, чтобы рассматривать его как реализацию интерфейса, т. е.

bar(Enum<? extends Fooable> fe)
{
  fe.ordinal();
  ((Fooable)fe).someCommonMethod();
}

и хотя это должно быть безопасно... это кажется неоптимальным, и я могу что-то упустить из виду. Конечно, если я попытаюсь просто передать параметр как Fooable, то я закончу кастингом, чтобы рассматривать его как Enum, и это не только не -усиление, теперь я даже не в безопасности. См. далее:

bar(Fooable fe)
{
  // potentially unsafe cast!
  ((Enum<?>)fe).ordinal();
  fe.someCommonMethod();
}

Есть ли что-то, что я упускаю из виду, или

Enum<? extends Fooable>

примерно так близко к «хорошему» решению, как я получу?

Я относительно новичок в Java и до сих пор ловлю себя на том, что пытаюсь использовать его как C или C++, поэтому, если я обращаюсь с ним как с молотком, а не с пилой, или упускаю из виду что-то глупо простое, не стесняйтесь указать на это:)

9
задан Khanmots 10 August 2012 в 21:43
поделиться