Jak mogę wymagać, aby parametr ogólny był enumem implementującym interfejs?

Nie jestem w 100% przekonany, że to dobry pomysł, ale wpadłem dziś na kod, który jest obecnie implementowany jako:

class MyWidget <T extends Enum<T> > {
  MyWidget(Map<T, Integer> valueMap) {
    mValueMap = valueMap;
  }

  Map<T, Integer> mValueMap;
}

gdzieMyWidget następnie oferuje metody, które używająmValueMap przekonwertować przekazanegoEnum do / z anInteger.

To, co rozważałem, to próba zreformowania tego, aby zadeklarować moje wyliczenie:

interface MyInterface {
  public Integer getValue();
}

enum MyEnum implements MyInterface {
  foo, bar;
  public Integer getValue() {
    return ordinal();
  }
}

I wtedy będę mógł przepisaćMyWidget w coś, co wyglądało mniej więcej tak:

public class MyWidget<T extends Enum<T> extends MyInterface> {
  ...
}

i wtedy będzie mógł zadzwonić dogetValue() metoda zMyInterface naTobiekty typu wewnątrzMyWidget. Problem polega oczywiście na tym, że „<T extends Enum<T> extends MyInterface>„nie jest prawidłową składnią. Czy jest jakiś sposób, aby to wyłączyć?

Nie chcę po prostu miećMyWidget<T extends MyInterface>, ponieważ ważne jest również, aby T było wyliczeniem.

Z góry dziękuję!

questionAnswers(2)

yourAnswerToTheQuestion