Я не уверен на 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 было перечислением.
Спасибо заранее!