枚举的通用类,值的数量

时间:2012-11-14 15:13:20

标签: java generics enums

我如何找出我的枚举在这个例子中有多少值:

public class Analyser<C extends Enum<C>>{
  private long[] dist;
  public Analyser() {
    super();
    dist = new long [C.getEnumConstants().length];
  }
}

最后一行不起作用。

2 个答案:

答案 0 :(得分:9)

你需要传入枚举的类文字:

public Analyser(Class<C> enumType) {
    super();
    dist = new long [enumType.getEnumConstants().length];
}

...

Analyser<MyEnum> analyser = new Analyser(MyEnum.class);

这是因为C由于type erasure而在运行时没有意义。

答案 1 :(得分:2)

我猜最后一行无法编译。您需要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

如果你想编写通用代码来检查任何enum有多少值,你可以编写一个实用方法,如:

  public static int enumSize(Class<C extends Enum<C>> clazz) {
    return clazz.getEnumConstants().length];
  }