1. ホーム
  2. java

[解決済み] enumに含まれるすべての名前をString[]として取得する

2022-10-16 12:15:23

質問

の配列として enum 要素の名前を取得する最も簡単かつ/または最短の方法は何ですか? String s?

どういうことかというと、例えば以下のようなenumがあったとします。

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

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

その names() メソッドは配列を返します。 { "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" } .

どのように解決するのですか?

これは、あらゆる enum クラスのためのワンライナーです。

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

Pre 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

ハードコードされたenumクラスに対してシンプルなものが欲しいだけの場合。

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