开发者

Simple enum question

how can i reverse lookup the string value if given the int value for the given enum? so if i am given an int value of 0 it should return a value of "Freshman 1"I cant figure it out.

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

}


YearsInSchool.values()[0]; will get you the first enum value.

Also enum has a built in ordinal() method that returns it's index in the set. It seems like you are just replicating this with your intVal.


If you don't want to make it dependent on order of constants, you can use a lookup table initialized in static block:

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


This should return FRESHMAN1.

YearsInSchool yis = (YearsInSchool) YearsInSchool.class.getEnumConstants()[0];

if you what "Freshman 1", you should be able to do yis.getStrVal()


If you use Bala's answer you are locked in to keeping everything in sequence. I prefer to create a lookup map.

private static Map<Integer, YearsInSchool> intMap 
  = new HashMap<Integer, YearsInSchool>();

in your ctor add the line intMap.put(intVal, this);

add the method

public static YearsInSchool getByInt(int n) {
  return intMap.get(n); // error handling omitted here
}

Now you can add more enum values for situations you did not consider; you don't need them all in order. (For example, you could have enums for REDSHIRT_FRESHMAN etc.)


Just use the code below and you can call the method getStrValIn on enum class

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

}

This will solve your problem

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜