50

有没有一种内置的方法来获取 Enum 的项目数,例如Myenum.length

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

4

6 回答 6

78

是的,您可以使用该Enum.values()方法获取枚举值数组,然后使用该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
    }
}

http://ideone.com/zMB6pG

于 2013-07-05T15:14:36.233 回答
13

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

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

假设您有以下枚举:

public enum Color
{
    BLACK,WHITE,BLUE,GREEN,RED
}

以下语句将 5 分配给size

int size = Color.values().length;
于 2013-07-05T15:14:38.183 回答
5

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

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

于 2015-04-15T05:59:07.387 回答
4

为了避免每次调用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
   }
}
于 2021-03-12T14:34:21.343 回答
3

MyEnum.values()将枚举常量作为数组返回。

所以你可以使用:

int size = MyEnum.values().length
于 2013-07-05T15:20:08.760 回答
0

我搜索了 Kotlin 的答案,然后弹出了这个问题。所以,这是我的答案。

enum class MyEnum { RED, GREEN, BLUE }
MyEnum.values().size // 3

这是另一种方法:

inline fun <reified T : Enum<T>> sizeOf() = enumValues<T>().size
sizeOf<MyEnum>() // 3

感谢 Miha_x64 的回答

于 2021-09-27T08:11:54.197 回答