Java:如何从通用类型对象实例中获取枚举类的值?

时间:2015-03-06 21:15:12

标签: java generics enums

我想创建一个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());
}

请帮助,谢谢。

3 个答案:

答案 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);