Java 枚举的泛型类,值的数目

Java 枚举的泛型类,值的数目,java,generics,enums,Java,Generics,Enums,如何在本例中找出我的枚举有多少个值: public class Analyser<C extends Enum<C>>{ private long[] dist; public Analyser() { super(); dist = new long [C.getEnumConstants().length]; } } 公共类分析器{ 私人长[]区; 公共分析人员(){ 超级(); dist=新长[C.getEnumConstants().

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

public class Analyser<C extends Enum<C>>{
  private long[] dist;
  public Analyser() {
    super();
    dist = new long [C.getEnumConstants().length];
  }
}
公共类分析器{
私人长[]区;
公共分析人员(){
超级();
dist=新长[C.getEnumConstants().length];
}
}

最后一行无效。

您需要传入枚举的类文本:

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

...

Analyser<MyEnum> analyser = new Analyser(MyEnum.class);
公共分析器(类枚举类型){
超级();
dist=新长[enumType.getEnumConstants().length];
}
...
分析仪=新分析仪(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];
  }
}

无法访问泛型类型。这不是一个变量。如果构造函数引用了枚举,则可以找到长度。@JustinKSU Enum本身被声明为
公共抽象类Enum
。这是有效的。非常感谢。如果我只想将任意枚举作为私有字段,我将如何声明该类?@ratatosk不完全清楚您的问题。是否要声明泛型枚举常量的变量?他们只需要输入
C
。例如,这里
getEnumConstants()
返回一个
C[]
  public static int enumSize(Class<C extends Enum<C>> clazz) {
    return clazz.getEnumConstants().length];
  }