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!