user3429660:
¿Cómo puedo obtener los valores de una "enumeración" en un genérico?
public class Sorter<T extends Enum<?>> {
public Sorter() {
T[] result = T.values(); // <- Compilation error
}
}
Por otro lado, puedo consultar los valores de () de la clase de enumeración:
enum TmpEnum { A, B }
public class Tmp {
void func() {
T[] result = TmpEnum.values(); // <- It works
}
}
Enero Thoma:
Class::getEnumConstants
No se puede obtener directamente a partir T
porque los genéricos son borrados por el compilador de Java en tiempo de ejecución por lo que ya no se sabe lo que T
es.
Lo que puede hacer es exigir un Class<T>
objeto como parámetro de constructor. Desde allí se puede obtener una matriz de los objetos de enumeración llamando Class::getEnumConstants
.
public class Sorter<T extends Enum<T>> {
public Sorter(Class<T> clazz) {
final T[] enumConstants = clazz.getEnumConstants();
}
}