Как я могу требовать, чтобы универсальный параметр был перечислением, реализующим интерфейс?
Я не уверен на 100%, что это хорошая идея, но сегодня я наткнулся на некоторый код, который в настоящее время реализован как:
class MyWidget <T extends Enum<T> > {
MyWidget(Map<T, Integer> valueMap) {
mValueMap = valueMap;
}
Map<T, Integer> mValueMap;
}
гдеMyWidget
затем предлагает методы, которые используютmValueMap
для преобразования переданного вEnum
в / изInteger
.
То, что я собирался сделать, пыталось реорганизовать это, чтобы я объявил свое перечисление:
interface MyInterface {
public Integer getValue();
}
enum MyEnum implements MyInterface {
foo, bar;
public Integer getValue() {
return ordinal();
}
}
И тогда я смогу переписатьMyWidget
во что-то похожее на это:
public class MyWidget<T extends Enum<T> extends MyInterface> {
...
}
и тогда сможет позвонитьgetValue()
метод изMyInterface
наT
бъекты типа @ в пределахMyWidget
. Проблема, конечно, в том, что "<T extends Enum<T> extends MyInterface>
"Неверный синтаксис. Есть ли способ сделать это?
Я не хочу просто иметьMyWidget<T extends MyInterface>
, потому что также важно, чтобы T было перечислением.
Заранее спасибо