¿Cómo puedo solicitar que un parámetro genérico sea una enumeración que implementa una interfaz?

No estoy 100% convencido de que sea una buena idea, pero hoy me he topado con un código que actualmente se implementa como:

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

  Map<T, Integer> mValueMap;
}

dóndeMyWidget luego ofrece métodos que utilizanmValueMap para convertir el pasadoEnum a / desde unInteger.

Lo que estaba considerando hacer era tratar de refactorizar esto, para declarar mi enumeración:

interface MyInterface {
  public Integer getValue();
}

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

Y entonces podría reescribirMyWidget en algo que se parecía vagamente a esto:

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

y entonces podría llamar algetValue() método deMyInterface enTobjetos de tipo dentroMyWidget. El problema, por supuesto, es que "<T extends Enum<T> extends MyInterface>"no es una sintaxis válida. ¿Hay alguna manera de lograr esto?

No quiero solo tenerMyWidget<T extends MyInterface>, porque también es importante que T sea una enumeración.

¡Gracias por adelantado!

Respuestas a la pregunta(2)

Su respuesta a la pregunta