Простой перечислимый вопрос - PullRequest
0 голосов
/ 10 мая 2011

как я могу отменить поиск строкового значения, если дано значение int для данного перечисления? поэтому, если мне присвоено значение int, равное 0, оно должно вернуть значение «Freshman 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 ]

5 голосов
/ 10 мая 2011

YearsInSchool.values()[0]; даст вам первое значение перечисления.

Также в enum есть встроенный метод ordinal(), который возвращает свой индекс в наборе. Похоже, вы просто копируете это с вашим intVal.

2 голосов
/ 10 мая 2011

Если вы не хотите, чтобы она зависела от порядка констант, вы можете использовать справочную таблицу, инициализированную в блоке 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);
    }
}
1 голос
/ 10 мая 2011

Если вы используете ответ Балы, вы заперты, чтобы держать все в порядке.Я предпочитаю создавать карту поиска.

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
}

Теперь вы можете добавить больше enumзначения для ситуаций, которые вы не рассматривали;вам не нужны все по порядку.(Например, вы могли бы иметь перечисления для REDSHIRT_FRESHMAN и т. Д.)

1 голос
/ 10 мая 2011

Это должно вернуть FRESHMAN1.

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

, если вы что «первокурсник 1», вы должны быть в состоянии сделать yis.getStrVal()

0 голосов
/ 10 мая 2011

Просто используйте приведенный ниже код и вы можете вызвать метод getStrValIn в классе enum

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

}

Это решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...