我想创建一个Enum编辑器,它将Enum类型作为其通用。 E是泛型类型,但仅限于Enum类型。如何从实例e?
获取Enum类的值public class ComboBoxEnumEditor<E extends Enum<E>>{
public ComboBoxEnumEditor(E e) {
// how to get values of E from e?
// attemp1:
List values = e.getClass().values();
// attemp2:
List values = ((Enum.class)e.getClass()).values();
// attemp3:
List values = ((Enum.class)e.getClass()).values();
// none of the above works...
}
}
说我有一个Enum
public enum Location {
Default( false, EAttributeLocation.MAIN_TABLE_IF_AVAILABLE ),
Main( false, EAttributeLocation.MAIN_TABLE ),
Overflow( false, EAttributeLocation.OVERFLOW_TABLE ),
Separate( false, EAttributeLocation.SEPARATE_TABLE );
......
}
我想让我的ComboBoxEnumEditor能够做到
{
ComboBoxEnumEditor(new Location());
}
请帮助,谢谢。
答案 0 :(得分:13)
看起来你正在寻找(但我可能会弄错)
Enum[] values = e.getClass().getEnumConstants();
或@pbabcdefp this answer中所提到的(对他来说是大+1),如果您希望E[]
代替Enum[]
E[] values = e.getDeclaringClass().getEnumConstants();
也基于
...将Enum类作为其通用
您的论点可能应该是Class<E> clazz
而不是E e
本身,因此您可以将其与ComboBoxEnumEditor(Location.class);
一起使用。在这种情况下,您可以简单地使用
E[] values = clazz.getEnumConstants();
答案 1 :(得分:5)
E[] arr = e.getDeclaringClass().getEnumConstants();
答案 2 :(得分:0)
简短回答......你不能。这样做不是有效的语法,因为您无法实例化枚举:
ComboBoxEnumEditor(new Location());
相反,您需要传递枚举的类并更改方法签名,例如
ComboBoxEnumEditor(Location.class);