Я не уверен на 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
-type объектов в пределах MyWidget
. Проблема, конечно, в том, что "<T extends Enum<T> extends MyInterface>
" является недопустимым синтаксисом. Есть ли способ снять это?
Я не хочу просто иметь MyWidget<T extends MyInterface>
, потому что также важно, чтобы T было перечислением.
Спасибо заранее!