当前位置: 首页 > 面试题库 >

将枚举中的所有名称作为String []获取

罗睿识
2023-03-14
问题内容

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

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

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);
}

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(", ");
}


 类似资料:
  • 我应该工作,对吧?但它不是!!!!它告诉我dbValue可以转换为RelationActiveEnum...

  • 但我的代码不起作用,它说类型没有定义:

  • 问题内容: 是否可以在Golang中创建而不获取Enum名称? 还是有一种动态定义常量的方法?我发现了基于结构和基于字符串的两种方式,但是两种方式都使我们再次键入每个标签1次(或者复制粘贴,引用或使用编辑器的宏)。 问题答案: AFAIK,不,如果不明确输入名称作为字符串,您将无法做到这一点。但是你可以使用工具从标准工具包来为你做它: 例如,鉴于此片段, 运行此命令 在同一目录下,将在packag

  • 我想迭代一个TypeScript一个类型,并获取每个枚举的符号名,例如:

  • 问题内容: 我有以下列举。 我需要将所有原始值存储为字符串数组(例如)。 我将此方法添加到枚举中。 但我收到以下错误。 找不到类型’GeneratorOf’的初始化程序,该初始化程序接受类型’(()-> _)’的参数列表 有没有更简单,更好或更优雅的方式来做到这一点? 问题答案: 有一个协议: 对于Swift <4.2 不,您无法查询包含的值。看到这篇文章。您必须定义一个列出所有值的数组。还可以在

  • 问题内容: 如果我有一个带有原始值的枚举: 如何将值转换为字符串?语言中是否可用这种类型名称自省? 类似的东西(此代码将不起作用): 问题答案: 从Xcode 7 beta 5(Swift版本2)开始,您现在可以默认使用来打印类型名称和枚举大小写,或者使用的初始值设定项或字符串插值语法转换为。因此,对于您的示例: 因此,不再需要定义和维护一个方便函数,该函数在每种情况下都可以打开以返回字符串文字。