将枚举元素的名称作为String
数组获取的最简单和/或最快捷的方法是什么?
我的意思是,例如,如果我有以下枚举:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
public static String[] names() {
// ...
}
}
names()
方法将返回数组{ "NEW", "RUNNABLE", "BLOCKED", "WAITING", "TIMED_WAITING", "TERMINATED" }
。
发布于 2012-12-09 09:18:46
下面是任何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(", ");
}
发布于 2012-12-09 08:09:23
为名称创建一个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;
}
发布于 2015-06-02 13:16:45
如果你可以使用Java 8,这会很好地工作(替代Yura的建议,更有效):
public static String[] names() {
return Stream.of(State.values()).map(State::name).toArray(String[]::new);
}
https://stackoverflow.com/questions/13783295
复制相似问题