如果给定枚举的int值,我怎么能反向查找字符串值?所以,如果给我一个0的int值,它应该返回一个“新生1”的值,我无法弄明白。
public enum YearsInSchool {
FRESHMAN1(0, "Freshman 1"),
FRESHMAN2(1, "Freshman 2"),
SOPHOMORE1(2, "Sophomore 1"),
SOPHOMORE2(3, "Sophomore 2"),
JUNIOR1(4, "Junior 1"),
JUNIOR2(5, "Junior 2"),
SENIOR1(6, "Senior 1"),
SENIOR2(7, "Senior 2"),
GRADUATE(8, "Graduate"),
FACULTY(9, "Faculty");
private int intVal;
private String strVal;
YearsInSchool(int intValIn, String strValIn){
intVal = intValIn;
strVal = strValIn;
}
public int getIntVal() {
return intVal;
}
public String getStrVal() {
return strVal;
}
}
答案 0 :(得分:5)
YearsInSchool.values()[0];
会为您提供第一个枚举值。
此外,枚举还有一个内置的ordinal()
方法,可以在集合中返回它的索引。您似乎只是使用intVal
复制此内容。
答案 1 :(得分:2)
如果您不想使其依赖于常量的顺序,您可以使用在static
块中初始化的查找表:
public enum YearsInSchool {
...
private static Map<Integer, YearsInSchool> intsToValues = new HashMap<Integer, YearsInSchool>();
static {
for (YearsInSchool y: values())
intsToValues.put(y.getIntValue(), y);
}
public static YearsInSchool getByInt(int y) {
return intsToStrings.get(y);
}
}
答案 2 :(得分:1)
这应该返回FRESHMAN1
。
YearsInSchool yis = (YearsInSchool) YearsInSchool.class.getEnumConstants()[0];
如果您是“新生1”,您应该可以yis.getStrVal()
答案 3 :(得分:1)
如果你使用Bala的答案,你就会被锁定以保持一切顺序。我更喜欢创建一个查找地图。
private static Map<Integer, YearsInSchool> intMap
= new HashMap<Integer, YearsInSchool>();
在你的ctor中添加该行
intMap.put(intVal, this);
添加方法
public static YearsInSchool getByInt(int n) {
return intMap.get(n); // error handling omitted here
}
现在,您可以为未考虑的情况添加更多枚举值;你根本不需要它们。 (例如,您可以使用REDSHIRT_FRESHMAN
等枚举。)
答案 4 :(得分:0)
只需使用下面的代码,您就可以在枚举类
上调用方法getStrValInpublic enum YearsInSchool {
FRESHMAN1(0, "Freshman 1"), FRESHMAN2(1, "Freshman 2"), SOPHOMORE1(2,
"Sophomore 1"), SOPHOMORE2(3, "Sophomore 2"), JUNIOR1(4, "Junior 1"), JUNIOR2(
5, "Junior 2"), SENIOR1(6, "Senior 1"), SENIOR2(7, "Senior 2"), GRADUATE(
8, "Graduate"), FACULTY(9, "Faculty");
private int intVal;
private String strVal;
YearsInSchool(int intValIn, String strValIn) {
intVal = intValIn;
strVal = strValIn;
}
public static String getStrValIn(int intValIn){
YearsInSchool[] values = values();
for (YearsInSchool yearsInSchool : values) {
if(yearsInSchool.getIntVal() == intValIn){return yearsInSchool.getStrVal();}
}
return null;
}
public int getIntVal() {
return intVal;
}
public String getStrVal() {
return strVal;
}
}
这将解决您的问题