Suponga que tengo varios tipos enumerados con unos constantes de cada uno:
public enum MyEnum1 {
ConstantA(),
ConstantB(),
ConstantC();
}
public enum MyEnum2 {
ConstantA(),
ConstantB(),
ConstantC();
}
¿Cómo puedo obtener una instancia de una de estas enumeraciones arbitrariamente de su nombre para que pueda invocar Enum.values()
sucesivamente.
Algo como: Enum<?> myEnumInstance = //something
El objetivo es invocar .values()
a encontrar y recuperar los datos dentro de las constantes en dicha arbitraria enum
basada en la introducción de texto de usuario.
Si los tipos enumerados almacenar datos que sean destinados a ser visitada polimórfica, entonces se debe implementar una interfaz apropiada. Digamos que estos datos son una sola int
, entonces los tipos enumerados podrían tener este aspecto (usando IntSupplier ):
public enum MyEnum1 implements IntSupplier {
ConstantA(1),
ConstantB(2),
ConstantC(3);
private final int number;
private MyEnum1(int number) { this.number = number; }
public int getAsInt() { return number; }
}
A continuación, puede aprovechar esa interfaz para obtener la lista de los valores enumerados (constantes) que se escribe correctamente:
IntSupplier[] myEnums = Class.forName("MyEnum1")
.asSubclass(IntSupplier.class)
.getEnumConstants();
Y usarlo para obtener los valores:
for(IntSupplier value : myEnums) {
System.out.println(value.getAsInt());
}