将枚举中的所有名称作为字符串获取[]

2022-08-31 08:45:45

将枚举元素的名称作为 s 数组的最简单和/或最短方法是什么?String

我的意思是,例如,如果我有以下枚举:

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;

    public static String[] names() {
        // ...
    }
}

该方法将返回数组 。names(){ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }


答案 1

以下是任何类的单行:enum

public static String[] getNames(Class<? extends Enum<?>> e) {
    return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}

Java 8之前仍然是一行代码,尽管不那么优雅:

public static String[] getNames(Class<? extends Enum<?>> e) {
    return Arrays.toString(e.getEnumConstants()).replaceAll("^.|.$", "").split(", ");
}

你可以这样称呼它:

String[] names = getNames(State.class); // any other enum class will work

如果你只是想要一些简单的东西来表示硬编码的枚举类:

public static String[] names() {
    return Arrays.toString(State.values()).replaceAll("^.|.$", "").split(", ");
}

答案 2

为名称创建一个数组,并调用返回所有枚举值的静态方法,然后循环访问这些值并填充名称数组。String[]values()

public static String[] names() {
    State[] states = values();
    String[] names = new String[states.length];

    for (int i = 0; i < states.length; i++) {
        names[i] = states[i].name();
    }

    return names;
}