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
naT
obiekty 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ę!