列挙型内のすべての名前をString[]として取得する 質問する

列挙型内のすべての名前をString[]として取得する 質問する

enum 要素の名前を配列として取得する最も簡単かつ最短の方法は何ですか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(", ");
}

おすすめ記事