Ich habe das Klassenobjekt für eine enum (ich habe eine Class<? extends Enum>
) und ich brauche eine Liste der aufgezählten Werte, die durch diese enum dargestellt werden. Die statische Funktion values
hat, was ich brauche, aber ich bin mir nicht sicher, wie man vom Klassenobjekt darauf zugreifen kann.Java Enums: Aufzählung Werte von einer Klasse <? extends Enum>
Antwort
mit Reflexion einfach Class#getEnumConstants() als Aufruf:
List<Enum> enum2list(Class<? extends Enum> cls) {
return Arrays.asList(cls.getEnumConstants());
}
Wenn Sie den Namen des Wertes kennen Sie brauchen:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
Wenn Sie das nicht tun, Sie können eine Reihe von ihnen bekommen (wie Tom zuerst kam):
klass.getEnumConstants();
Ich suprised nicht erwähnt zu sehen, dass EnumSet#allOf()
wird:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
Erzeugt eine ENUM-Satz alle Elemente in der angegebenen Elementtyp enthält.
Betrachten Sie die folgende enum
:
enum MyEnum {
TEST1, TEST2
}
Einfach das Verfahren wie folgt aufrufen:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
Natürlich, das gibt ein Set
, kein List
, aber es sollte genug sein, in viele (meistens?) Anwendungsfälle.
Oder, wenn Sie haben eine unbekannte enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
Der Vorteil dieses Verfahrens im Vergleich zu Class#getEnumConstants()
, ist, dass es eingegeben wird, so dass es nicht möglich ist, etwas zu passieren anderes als ein enum
es . Zum Beispiel ist der Code unten gültig und gibt null
:
String.class.getEnumConstants();
Während dies nicht kompiliert werden:
EnumSet.allOf(String.class); // won't compile
- 1. Java Generics - Klasse oder Klasse <? extends SomeClass>
- 2. <? extends > Java-Syntax
- 3. Was bedeutet <T extends?
- 4. Java Enums: De-Serialisierung eines beliebigen Enums aus einer Datei
- 5. Warum ändern diese Java-Enums Werte?
- 6. Objective-C: Aufzählung wie Java (int-Werte und viele andere für jede Aufzählung)
- 7. Mapping einer Liste von Enums
- 8. C++ entspricht der Verwendung von <T extends Klasse> für einen Java-Parameter/Rückgabetyp
- 9. Differenz zwischen Generika <T extends Anzahl & Vergleichbar <T>> und T extends Comparable <? extends Anzahl>
- 10. Alle Werte von Enums erhalten
- 11. Was ist die Verwendung von Sammlung <? extends SomeAbstractClass> anstelle von Collection <SomeAbstractClass>
- 12. Arraylist (Sammlung <? extends E> c)
- 13. C# entspricht der Klasse <E> und E extends Enum <E>
- 14. Iterieren einer Aufzählung in Java 8
- 15. Verwenden von Enums zum Überprüfen von Attributen einer Klasse/Instanz in Python
- 16. Java: spezifische enums und generische Enum <?> Parameter
- 17. Java: anonyme enums?
- 18. Java Enums - Switch Statements vs Besuchermuster auf Enums - Leistungsvorteile?
- 19. Java Generics setzen Karte <String,? extends Liste <String>>
- 20. Warum ist varargs (Klasse <? Extends Throwable> ... t) "ungeprüfte oder unsichere" Operation?
- 21. Automatische Aufzählung einer Sequenz
- 22. Scala Aufzählung und Reflexion
- 23. Java: Get List <> Produkte von einer Klasse in JComboBox einer anderen Klasse
- 24. Schlüsselwort extends in Rückgabetyp in Java-Methodensignatur
- 25. Coding Tip - Kreuzungstypen und Java-Enums
- 26. Frage zu Java enums
- 27. Unterschiede zwischen `Kopie (List <? super T> dest, Liste <? extends T> src)` und `Kopie (List <T> dest, Liste <? extends T> src)`
- 28. Java Schaltergehäuse - default vs explizite Aufzählung
- 29. Java-Klasse innerhalb einer Klasse
- 30. Wie kann ich testen, ob eine bitweise Aufzählung irgendwelche Werte von einer anderen bitweisen Aufzählung in C# enthält?
seine statische - Reflexion. – IAdapter
'Class' ist ein Reflexionsobjekt (es ist älter als das Paket). –