我有一个枚举的类对象(我有一个Class<? extends Enum>
),我需要得到这个枚举表示枚举值的列表。 values
静态函数具有我所需要的,但我不确定如何从类对象访问它。使用Java枚举:列出Class <?中的枚举值扩展枚举>
49
A
回答
90
10
反射是简单的调用Class#getEnumConstants():
List<Enum> enum2list(Class<? extends Enum> cls) {
return Arrays.asList(cls.getEnumConstants());
}
16
如果你知道你需要的值的名称:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
如果不这样做,你可以通过(如Tom得到的第一个)得到他们的数组:
klass.getEnumConstants();
3
我惊讶地看到,EnumSet#allOf()
没有提及:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
创建包含所有在指定元素类型的元素的枚举集。
考虑以下enum
:
enum MyEnum {
TEST1, TEST2
}
只需调用该方法是这样的:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
当然,这会返回一个Set
,不是List
,但应足够许多(大多数?)用例。
或者,如果你有一个未知的enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
这种方法的优点,相比Class#getEnumConstants()
,在于它是类型化的,这样就不可能通过任何其他比enum
它。例如,下面的代码是有效的,并返回null
:
String.class.getEnumConstants();
虽然这不会编译:
EnumSet.allOf(String.class); // won't compile
相关问题
- 1. 扩展枚举
- 2. “扩展”枚举
- 3. 扩展枚举
- 4. 扩展枚举?
- 5. 枚举之间的区别<?扩展ZipEntry>和枚举<ZipEntry>?
- 6. Java枚举找到枚举
- 7. Java类枚举枚举类
- 8. Java可扩展枚举
- 9. 是枚举Java中的枚举
- 10. Java在枚举中的枚举
- 11. 在枚举中枚举
- 12. Java:特定枚举和泛型枚举<?>参数
- 13. 带枚举的MySQL枚举
- 14. JSON.Net如何序列化字典<枚举,枚举>?
- 15. Java的枚举和PostgreSQL枚举
- 16. Java:旧枚举子集的新枚举
- 17. @class for typedef枚举?
- 18. 转换枚举来枚举
- 19. 重新枚举枚举
- 20. 使用列枚举的LINQ表枚举
- 21. 枚举抛出“不是枚举类型”
- 22. 获取枚举并发送枚举值
- 23. 枚举值碰撞枚举名
- 24. 扩展枚举在C#
- 25. 可扩展枚举计划
- 26. 扩展和枚举类型
- 27. 枚举扩展方法
- 28. 枚举大小<String>
- 29. 当枚举值不在枚举中时赋予枚举的默认值
- 30. 将协议扩展限制为单枚举枚举
其静态 - 反射。 – IAdapter 2009-10-26 19:40:43
'Class'是一个反射对象(它在包之前)。 – 2009-10-26 19:56:05