Como posso exigir um parâmetro genérico para ser um enum que implemente uma interface?

Eu não estou 100% convencido de que esta é uma boa ideia, mas eu esbarrei em algum código hoje que está atualmente implementado como:

class MyWidget <T extends Enum<T> > {
  MyWidget(Map<T, Integer> valueMap) {
    mValueMap = valueMap;
  }

  Map<T, Integer> mValueMap;
}

OndeMyWidget em seguida, oferece métodos que usammValueMap para converter o passadoEnum de / para umInteger.

O que eu estava pensando em fazer era tentar refatorar isso, para que eu declarasse minha enumeração:

interface MyInterface {
  public Integer getValue();
}

enum MyEnum implements MyInterface {
  foo, bar;
  public Integer getValue() {
    return ordinal();
  }
}

E então eu seria capaz de reescreverMyWidget em algo que parecia vagamente assim:

public class MyWidget<T extends Enum<T> extends MyInterface> {
  ...
}

e então seria capaz de chamar ogetValue() método deMyInterface emT-tipo de objetos dentroMyWidget. O problema, claro, é que "<T extends Enum<T> extends MyInterface>"não é uma sintaxe válida. Existe alguma maneira de fazer isso?

Eu não quero apenas terMyWidget<T extends MyInterface>, porque também é importante que T seja uma enumeração.

Desde já, obrigado!

questionAnswers(2)

yourAnswerToTheQuestion