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

Java: How to get Values of an Enum Class from an Generic Type Object instance?

我想创建一个枚举编辑器,它采用枚举类型作为其泛型。 E 是泛型,但仅限于 Enum 类型。如何从实例 e?

中获取枚举 class 的值
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... 
    }
}

假设我有一个枚举

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());
}

请帮忙,谢谢。

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

Enum[] values = e.getClass().getEnumConstants();

或如 @pbabcdefp in 所述(对他来说是大 +1)如果你想要 E[] 而不是 Enum[]

E[] values = e.getDeclaringClass().getEnumConstants();

同样基于

...which takes an Enum Class as its generic

您的论点可能应该是 Class<E> clazz 而不是 E e 本身,因此您可以将它与 ComboBoxEnumEditor(Location.class); 一起使用。在那种情况下,您可以简单地使用

E[] values = clazz.getEnumConstants();

简答...你不能。这样做是无效的语法,因为您无法实例化枚举:

ComboBoxEnumEditor(new Location());

相反,您需要传递枚举的 class 并为此更改您的方法签名,例如

ComboBoxEnumEditor(Location.class);
E[] arr = e.getDeclaringClass().getEnumConstants();