java - 使用字符串来评估枚举?

标签 java eclipse enums constants

我试图使用字符串来评估字符串内容是否等于我声明的枚举类型。但是,我在 Eclipse 中遇到错误,试图强制我将 nameOfMonth 创建为枚举常量。对我来说,使用枚举似乎更容易,而不是编写代码来专门声明一月为#1,二月为#2,等等。有没有办法可以使用用户定义的字符串并将其与我的枚举进行比较?例如,在下面的代码中,如果参数 String nameOfMonth 等于一月,我希望它提取索引位置并添加一个。

这是代码:

    package ProgrammingChallenges;

public class Month
{
    enum MONTH
    {
        January, February, March, April, May, June, July, August, September, October, November, December
    }

    private int monthNumber;

    public Month()
    {
        monthNumber = 1;
    }

    public Month(int monthNumber)
    {
        if (monthNumber < 1 || monthNumber > 12)
            this.monthNumber = 1;
        else
            this.monthNumber = monthNumber;

    }

    public Month(String nameOfMonth)
    {
        if(nameOfMonth.equals(MONTH.nameOfMonth))
            this.monthNumber = namOfMonth.ordinal() + 1;
    }

}

最佳答案

Enum.valueOf

您可以使用valueOf枚举的方法。

public Month(String nameOfMonth)
{
   this.monthNumber = MONTH.valueOf(nameOfMonth).ordinal() + 1;
}

这里不需要if语句,直接使用Java内置的valueOf枚举静态方法即可获取字符串对应的枚举。如果 nameOfMonth 与枚举不匹配,它将抛出异常:

java.lang.IllegalArgumentException: No enum constant com.yourclass.yourenum.the_invalid_enum_name
    at java.lang.Enum.valueOf(Unknown Source)

关于java - 使用字符串来评估枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19392385/

相关文章:

java - Objective-C : enum like Java (int values and many others for each enum)

c# - 设置 Flag 枚举除一个字段之外的所有值

java - 打印烧烤条形码

java - 检查 CardLayout 中是否存在带有名称的卡片

java - 这是否违反了德墨忒尔法则?与可读代码

java - 为什么 javac 1.5 与 Eclipse 编译器相比运行速度如此之慢?

java - 如何通过单击按钮更改 JAVA 中的字符串?

java - src 文件无法在 Eclipse 中打开

java - 为什么 m2e 插件会构建到 Maven jar 项目的目标文件夹中的 WEB-INF/classes 中?

c# - WebAPI 中的枚举返回字符串值