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

Ale*_*lex 3 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... 
    }
}
Run Code Online (Sandbox Code Playgroud)

说我有一个枚举

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 );
    ......
}
Run Code Online (Sandbox Code Playgroud)

我希望我的ComboBoxEnumEditor能够做到

{
   ComboBoxEnumEditor(new Location());
}
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢.

Psh*_*emo 14

看起来你在寻找(但我可能会弄错)

Enum[] values = e.getClass().getEnumConstants();
Run Code Online (Sandbox Code Playgroud)

或者正如@pbabcdefp这个答案中提到的那样(对他来说是大+1)如果你想要E[]而不是Enum[]

E[] values = e.getDeclaringClass().getEnumConstants();
Run Code Online (Sandbox Code Playgroud)

也基于

......将Enum类作为其通用类

你的论点应该Class<E> clazz不是E e本身,所以你可以使用它ComboBoxEnumEditor(Location.class);.在这种情况下,你可以简单地使用

E[] values = clazz.getEnumConstants();
Run Code Online (Sandbox Code Playgroud)


Pau*_*ton 5

E[] arr = e.getDeclaringClass().getEnumConstants();
Run Code Online (Sandbox Code Playgroud)