如何获得枚举的可能项目数?

Adr*_*sbe 29 java enums

是否有内置的方法来获取Enum的项目数量,如Myenum.length,

或者我必须自己实现一个功能int size()硬编码元素的数量?

Hun*_*len 53

是的,您可以使用该Enum.values()方法获取Enum值数组,然后使用该length属性.

public class Main {
    enum WORKDAYS { Monday, Tuesday, Wednesday, Thursday, Friday; }

    public static void main(String[] args) {
        System.out.println(WORKDAYS.values().length);
        // prints 5
    }
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/zMB6pG

  • `Enum.values()` 每次都会分配一个新数组,因此不建议高调用率(即 for 循环条件)使用它。如果您需要经常调用该值,请缓存该值。 (3认同)
  • @Hatefiend 那么你有什么建议呢? (3认同)
  • @MarkJeronimus 即使不经常调用它,这仍然是不好的做法。仅仅为长度属性分配一个数组是愚蠢的,即使只分配一次。 (2认同)

Rah*_*ate 10

你可以通过使用获得长度 Myenum.values().length

Enum.values()返回所有的数组enum常数.您可以使用length此数组的变量来获取enum常量数.

假设您有以下枚举:

public enum Color
{
    BLACK,WHITE,BLUE,GREEN,RED
}
Run Code Online (Sandbox Code Playgroud)

以下语句将指定5 size:

int size = Color.values().length;
Run Code Online (Sandbox Code Playgroud)

  • `length`不是数组的方法,它是属性字段,所以你不用括号就可以使用它. (4认同)

Yev*_*nko 8

避免每次都调用values()方法:

public class EnumTest {

    enum WORKDAYS {
       Monday,
       Tuesday,
       Wednesday,
       Thursday,
       Friday;

       public static final int size;
       static {
          size = values().length;
       }
   }


   public static void main(String[] args) {
      System.out.println(WORKDAYS.size); // 5
   }
}
Run Code Online (Sandbox Code Playgroud)


jaa*_*mit 5

enum.values() 方法由 Java 编译器添加,API 中未提及。

Enum 的 values() 方法的文档在哪里?