¿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
enT
objetos 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!