¿Cómo puedo obtener los valores de una "enumeración" en un genérico?

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 Tporque los genéricos son borrados por el compilador de Java en tiempo de ejecución por lo que ya no se sabe lo que Tes.

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();
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=226281&siteId=1
Recomendado
Clasificación