Как я могу требовать, чтобы универсальный параметр был перечислением, реализующим интерфейс?

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

Заранее спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос