我目前为Java库编写的方法之一是将任意枚举类型的数组作为其唯一参数。如果其中任何一个为非空,我可以访问表示该枚举类型的java.lang.Class实例,该枚举类型可能是公共类型,也可能不是公共类型。(如果它们都是空的,那么在这种情况下,这是没有意义的。)如何获得枚举类型所具有的可能值的数目?我目前使用的方法-- Array.getLength(clazz.getMethod("values").invoke(null)); --在Enum类不公开时失败。我该怎么解决这个问题?
发布于 2015-10-27 16:48:06
从Class对象获取枚举常量数组的最简单方法是
clazz.getEnumConstants();若要查找枚举常量的数量,可以向其中添加.length。
如果要从枚举的实例中获取枚举常量数组,则必须这样做。
e.getDeclaringClass().getEnumConstants();而不是
e.getClass().getEnumConstants();以下示例说明了这种情况的原因:
private enum Colour {
WHITE,
BLUE {
@Override
public String toString() {
return "blue";
}
}
}
public static void main(String[] args) throws Exception {
System.out.println(Arrays.toString(Colour.BLUE.getClass().getEnumConstants()));
System.out.println(Arrays.toString(Colour.WHITE.getClass().getEnumConstants()));
System.out.println(Arrays.toString(Colour.BLUE.getDeclaringClass().getEnumConstants()));
}这个程序输出
null
[WHITE, blue]
[WHITE, blue]这里要做的是,为了为BLUE常量重写方法BLUE,创建了一个Colour子类。这意味着Colour.BLUE.getClass()不返回Colour.class,因此Colour.BLUE.getClass().getEnumConstants()返回null。此问题不适用于WHITE,因为WHITE不需要额外的类。
https://stackoverflow.com/questions/33358616
复制相似问题