2

この例で列挙型にいくつの値があるかを調べるにはどうすればよいですか:

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

最後の行は機能しません。

4

2 に答える 2

9

列挙型のクラス リテラルを渡す必要があります。

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

...

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

これは、型 eraseCにより、実行時に意味がないためです。

于 2012-11-14T15:18:59.960 に答える
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];
  }
于 2012-11-14T15:24:15.427 に答える