Java:Enumのordinal値に対する操作を一般化する



多くのEnumクラスを扱う場合に、そのordinalというint値への操作を一般化したい。

つまり、intとEnumクラスが与えられた場合に、Enumクラスの列挙子として返し、逆にEnumクラスの列挙子をintとして返したいのだ。

使ったことがなかったのだが、これは非常に簡単だった。これを行うユニットテストを示す。

import static org.junit.Assert.*;

import org.junit.*;

public class EnumTest {

  public static enum UserLevel {  
    NONE,
    USER,
    ADMIN,
    DEVEL;
  }

  @Test
  public void test() {
    assertEquals(UserLevel.ADMIN,  getEnumerator(UserLevel.class, 2));
    assertEquals(2, getOrdinal(UserLevel.ADMIN));
  }

  <T extends Enum<T>>T getEnumerator(Class<T>clazz, int ordinal) {
    return clazz.getEnumConstants()[ordinal];
  }

  <T extends Enum<T>>int getOrdinal(T value) {
    return value.ordinal();
  }
}