Wie kann ich festlegen, dass ein generischer Parameter eine Aufzählung ist, die eine Schnittstelle implementiert?

Ich bin nicht zu 100% davon überzeugt, dass dies eine gute Idee ist, aber ich bin heute auf einen Code gestoßen, der derzeit wie folgt implementiert ist:

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

  Map<T, Integer> mValueMap;
}

woherMyWidget dann bietet Methoden, die verwendenmValueMap um die übergebenen zu konvertierenEnum zu / von einemInteger.

Ich überlegte, dies zu überarbeiten, um meine Aufzählung zu erklären:

interface MyInterface {
  public Integer getValue();
}

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

Und dann könnte ich umschreibenMyWidget in etwas, das ungefähr so ​​aussah:

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

und wäre dann in der lage das anzurufengetValue() Methode vonMyInterface aufTObjekte innerhalb vonMyWidget. Das Problem ist natürlich, dass "<T extends Enum<T> extends MyInterface>"ist keine gültige Syntax. Gibt es eine Möglichkeit, dies durchzuziehen?

Ich will nicht nur habenMyWidget<T extends MyInterface>, weil es auch wichtig ist, dass T eine Aufzählung ist.

Danke im Voraus!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage