Ho l'oggetto di classe per un enum (ho un Class<? extends Enum>
) e ho bisogno di ottenere un elenco dei valori enumerati rappresentati da questo enum. La funzione statica values
ha ciò di cui ho bisogno, ma non sono sicuro di come accedervi dall'oggetto classe.Java Enum: elenca i valori enumerati da una classe <? estende Enum>
risposta
utilizzando riflessione è semplice come chiamare Class#getEnumConstants():
List<Enum> enum2list(Class<? extends Enum> cls) {
return Arrays.asList(cls.getEnumConstants());
}
Se si conosce il nome del valore è necessario:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
Se non lo fai, è possibile ottenere una serie di loro da (come Tom ha avuto modo di prima):
klass.getEnumConstants();
sono sorpreso di vedere che EnumSet#allOf()
non specificato:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
Crea un set enum contenente tutti gli elementi del tipo di elemento specificato.
Si consideri il seguente enum
:
enum MyEnum {
TEST1, TEST2
}
Basta chiamare il metodo come questo:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
Naturalmente, questo restituisce una Set
, non un List
, ma dovrebbe essere sufficiente a molti (più?) casi d'uso.
Oppure, se si dispone di uno sconosciuto enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
Il vantaggio di questo metodo, rispetto a Class#getEnumConstants()
, è che viene digitato in modo che non è possibile passare qualcosa di diverso da un enum
ad esso . Ad esempio, il codice seguente è valida e restituisce null
:
String.class.getEnumConstants();
Anche se questo non compilerà:
EnumSet.allOf(String.class); // won't compile
- 1. Enum <? estende l'interfaccia>
- 2. Generici e Classe <? si estende Enum <?>>, EnumSet.allOf (classe) vs class.getEnumConstants()
- 3. Java Generics - Classe o Classe <? estende SomeClass>
- 4. Perché i membri enum negativi sono enumerati per ultimi?
- 5. C'è una differenza tra i limiti generici "Enum <T> & Foo" e "Enum <estende Foo?>"
- 6. getDefaultTracker() da una classe che estende InputMethodService?
- 7. Confronta valori enum Java
- 8. Come determinare se una classe estende un'altra classe in Java?
- 9. C++ 11 "tipi enumerati" (17.5.2.1.2)
- 10. Come ottenere tutti i valori dalla classe enum di python?
- 11. Generici Java: <B estende BaseB> non corrisponde a <? estende BaseB>
- 12. Java serie di enum valori
- 13. l'aggiunta di valori da una classe in Java
- 14. È possibile creare un'istanza di un'annotazione Java data una classe <? estende Annotazione>?
- 15. Classe Java che estende String (o simile)
- 16. Come convertire String in enum value quando enum type reference è una classe <?>?
- 17. Come ottenere tutti i valori enum in Java?
- 18. Java classe che estende contenente metodo main
- 19. Java Generics jolly estende classe finale
- 20. WildCard Java Generics: <? estende Numero> vs <T estende Numero>
- 21. Accesso ai valori enum di un'altra classe
- 22. Java: Dichiarazione di una mappa con due generici relativi tipi (?? <T> Mappa <Class <estende ClasseA <T>>, classe <estende ClassB <T> >>)
- 23. java riempimento elenco con tutti enum valori
- 24. Java Generics - Impossibile convertire da <? estende MyObject> a <MyObject>
- 25. Elenco <? estende MyType>
- 26. Creazione di una classe che si estende da ES6 Mappa
- 27. I membri privati quando si estende una classe utilizzando ExtJS
- 28. Come usare enum con valori in Java
- 29. MongoDB elenca i database disponibili in java
- 30. Elenca tutti i metodi di una data classe, esclusi i metodi della classe genitrice in PHP
sua statica - riflessione. – IAdapter
'Class' è un oggetto riflesso (precede il pacchetto). –