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
aufT
Objekte 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!