Ich bin nicht zu 100 % davon überzeugt, dass dies eine gute Idee ist, aber ich bin heute auf 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;
}
wo MyWidget
bietet dann Methoden an, die verwenden mValueMap
das Eingereichte umzuwandeln Enum
nach/von einem Integer
.
Was ich überlegte, war der Versuch, dies umzugestalten, damit ich meine Aufzählung deklarieren würde:
interface MyInterface {
public Integer getValue();
}
enum MyEnum implements MyInterface {
foo, bar;
public Integer getValue() {
return ordinal();
}
}
Und dann könnte ich umschreiben MyWidget
in etwas, das vage so aussah:
public class MyWidget<T extends Enum<T> extends MyInterface> {
...
}
und würde dann die anrufen können getValue()
Methode aus MyInterface
an T
-Typ-Objekte innerhalb MyWidget
. Das Problem ist natürlich, dass “<T extends Enum<T> extends MyInterface>
” ist keine gültige Syntax. Gibt es eine Möglichkeit, dies zu umgehen?
Ich will nicht nur haben MyWidget<T extends MyInterface>
weil es auch wichtig ist, dass T eine Aufzählung ist.
Danke im Voraus!