Java 枚举和字符串之间的映射?

Java 枚举和字符串之间的映射?,java,enums,Java,Enums,所以,我最近读了一篇文章,我想做同样的事情 我真的不在乎“丑陋”等等,所以我实施了以下方法之一: public enum Day { Monday(1), Tuesday(2), Wednesday(3), Thursday(4), Friday(5), Saturday(6), Sunday(7); public final int id; Day(int id) { this.id =

所以,我最近读了一篇文章,我想做同样的事情

我真的不在乎“丑陋”等等,所以我实施了以下方法之一:

public enum Day {

    Monday(1), 
    Tuesday(2), 
    Wednesday(3), 
    Thursday(4), 
    Friday(5), 
    Saturday(6), 
    Sunday(7);

    public final int id;

    Day(int id) {
        this.id = id;
    }

    public static Day getByID(int id) {
        Day d = null;
        for (Day dTemp : Day.values())
        {
            if (id == dTemp)
            {
                d = dTemp;
                break;
            }
        }

        return d;
    }

    public Day getNext() {
        return values()[(ordinal()+1)%values().length];
    }

    public Day getPrev() {
        return values()[(ordinal()-1)%values().length];
    }
}
但是,当我这样做时,它的问题在于if语句:

if (id == dTemp)
它说它们是不兼容的类型。我应该如何修复它?

如果(id==dTemp.id)使用
。枚举是类,枚举值是对象而不是int,因此不能(显式或隐式)强制转换为
int

或者,请注意,枚举具有序号,即其位置的id。在您的示例中,
Monday
的序号为0,
Sunday
的序号为6。您可以通过调用
ordinal()
方法来访问序号

因此,如果
id
是基于的,则可以执行以下操作:

public static Day getByID(int id) {   
  //check id is between 1 and 7, I'll leave that for you
  return Day.values()[id - 1];
}
请注意,您可能希望在私有静态变量中缓存
Day.values()
,然后访问缓存的数组

顺便问一下,你在问题中提到的字符串在哪里

if(id == dTemp.id)
应该有用


或者尝试使用
enum
ordinal()
方法

public final int ordinal()返回此枚举常量的序号(其在枚举声明中的位置,初始常量的序号为零)。大多数程序员不会使用这种方法。它设计用于复杂的基于枚举的数据结构,如EnumSet和EnumMap

返回: 此枚举常量的序号


嗯,我复制了你的代码并进行了相应的测试

两者

工作良好,生产符合预期。声明

System.out.println(Day.Friday.getByID(1));

星期一

你被我的孩子c#误导了吗?()仅供参考,Bhaxy已经在使用
ordinal()
s来获取下一天和前几天的数据。@是的,我也看到了。我想知道他为什么不在静态方法中使用它。
if(id == dTemp.id)
System.out.println(Day.Friday.getByID(1));