Enum类提供了一个ordinal()方法,用来返回枚举对象的序数。在有些情况下,我们需要使用这个序数,而且还有可能再根据这个序数生成所需要的枚举对象,可是Enum并没有提供valueOf(int)这样的方法,那是不是就做不到呢?

    对于这个问题,实际上可以利用枚举类型的values()方法间接的做到。values()方法返回一个枚举对象数组,在自定义的枚举类型中,我们只要定义自己的valueOf(int)方法,并返回该数组下标对象的对象就可以了。加入如下代码:

public static ArticleStatus valueOf(int ordinal) {
  if (ordinal < 0 || ordinal >= values().length) {
      throw new IndexOutOfBoundsException("Invalid ordinal");
  }
  return values()[ordinal];
 }