Ich habe das Klassenobjekt für eine Aufzählung (ich habe eine Class<? extends Enum>
) und ich muss eine Liste der aufgezählten Werte erhalten, die durch diese Aufzählung dargestellt werden. Die values
statische Funktion hat das, was ich brauche, aber ich bin nicht sicher, wie ich vom Klassenobjekt darauf zugreifen kann.
75
Class
ist ein Reflexionsobjekt (es ist älter als das Paket).Antworten:
Class.getEnumConstants
quelle
Wenn Sie den Namen des gewünschten Werts kennen:
Class<? extends Enum> klass = ... Enum<?> x = Enum.valueOf(klass, "NAME");
Wenn Sie dies nicht tun, können Sie eine Reihe von ihnen erhalten (wie Tom es zuerst getan hat):
quelle
Das Verwenden von Reflection ist einfach, indem Sie Class # getEnumConstants () aufrufen :
List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) { return Arrays.asList(cls.getEnumConstants()); }
quelle
Ich bin überrascht zu sehen, dass
EnumSet#allOf()
das nicht erwähnt wird:Beachten Sie Folgendes
enum
:enum MyEnum { TEST1, TEST2 }
Rufen Sie die Methode einfach so auf:
Dies gibt natürlich a zurück
Set
, nicht aList
, aber es sollte in vielen (den meisten?) Anwendungsfällen ausreichen.Oder wenn Sie ein Unbekanntes haben
enum
:Der Vorteil dieser Methode im Vergleich zu
Class#getEnumConstants()
ist, dass sie so typisiert ist, dass nichts anderes als eineenum
an sie übergeben werden kann. Der folgende Code ist beispielsweise gültig und gibt Folgendes zurücknull
:Dies wird zwar nicht kompiliert:
EnumSet.allOf(String.class); // won't compile
quelle
EnumSet
verwendet einen "Bitvektor", der in a gespeichert istlong
.