2013-12-15 3 views
0

Пожалуйста, обратите внимание на следующее Java перечисление:Non порядкового INT, как Enum

public enum carrier { 
    Default(0), 
    CarrierOne(1), 
    CarrierTwo(2), 
    CarrierWhoKnows(102312); 
    private final int value; 
    private static final Map<Integer, carrier> carrierMap = new HashMap<Integer, carrier>(); 

    static { 
     for (carrier type : carrier.values()) { 
      carrierMap.put(type.value, type); 
     } 
    } 

    private carrier(int value) { 
     this.value = value; 
    } 

    public static int getIntValue(int value) { 
     return value; 
    } 

    public static carrier getStringValue(int value) { 
     return carrierMap.get(value); 
    } 
} 

Что мне нужно для GetIntValue, чтобы вернуть значение, как это делает (то есть 102312), однако, как перечисление, а не Int , Возможно ли сделать , чтобы ввести значение int 102312 в качестве перечисления. Обратите внимание: я не имею в виду порядковый номер (мы его не используем), или строковое значение, которое правильно возвращается в getStringValue. Я имею в виду возвращение значения 102312 в качестве перечисления вместо int.

Thanks in Advance,

Nick.

+1

Нет, это невозможно. Зачем вам это нужно? –

+2

Из того, что я могу сказать, getStringValue делает именно то, что вы говорите, что хотите получить getIntValue. Просьба уточнить. В любом случае, перечисления не являются ни строками, ни ints; вы не можете отбрасывать из int в любой класс (кроме autoboxing в Integer), потому что int не является классом. – Vitruvius

+0

Зачем вы возвращаете переданное значение 'value' в' getIntValue (int value) '? Что он должен делать? Наконец, 'getStringValue' не возвращает строку' String'. –

ответ

1

Если я вас хорошо понимаю, вы просто хотите получить член перечисления по этому значению int.

public static carrier getStringValue(int value) { 
    for(carrier c : carrier .values()){ 
     if(c.value == value) return c; 
    } 
    throw new IllegalArgumentException("Got illegal value"); 
} 

Проверьте код, чтобы быть более читаемым. Измените имена методов, переименуйте имя переименования (должно быть Carrier), подумайте о методе getIntValue и о его выполнении. Похоже, что он должен быть напротив getStringValue и возвращает значение int члена перечисления

public static int getIntValue(carrier c) { 
    if(c == null) throw new IllegalArgumentException("Got null, expected carrier");  
    return c.value; 
} 
+1

Чтобы быть более понятным, 'getStringValue' следует называть как' getByValue' – hatesms

Смежные вопросы