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();
我想创建一个枚举编辑器,它采用枚举类型作为其泛型。 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 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();