简单的枚举问题

时间:2011-05-10 17:54:00

标签: java enums

如果给定枚举的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;
}

}

5 个答案:

答案 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)

只需使用下面的代码,您就可以在枚举类

上调用方法getStrValIn
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 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;
    }

}

这将解决您的问题