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