有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

最后一行行不通


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 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扩展类。如果您在开发时知道enum类,您可以说MyEnum.values().length

    如果要编写检查任何枚举有多少个值的通用代码,只需编写一个实用程序方法,如:

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