在此示例中,我如何找出我的枚举有多少个值:
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser() {
super();
dist = new long [C.getEnumConstants().length];
}
}
最后一行不起作用。
您需要传入枚举的类文字:
public Analyser(Class<C> enumType) {
super();
dist = new long [enumType.getEnumConstants().length];
}
...
Analyser<MyEnum> analyser = new Analyser(MyEnum.class);
这是因为类型擦除C
在运行时没有意义。
我猜最后一行无法编译。您需要Class
实例来执行此操作。这是您的代码的修改版本:
public class Analyser<C extends Enum<C>>{
private long[] dist;
public Analyser(Class<C> clazz) {
super();
dist = new long [clazz.getEnumConstants().length];
}
}
但是,我无法完全理解您为什么要从Enum
. 如果您在开发时知道枚举类,您可以说MyEnum.values().length
.
如果您想编写通用代码来检查任何枚举有多少值,您可以编写一个实用方法,例如:
public static int enumSize(Class<C extends Enum<C>> clazz) {
return clazz.getEnumConstants().length];
}