Android Java бросил долго, чтобы перечислить проблему - PullRequest
0 голосов
/ 27 августа 2011

У меня проблема с приведением длинного типа Java к типу Enum.Я использую этот код:

public enum RPCPacketDataType {
    PT_JSON(1),
    PT_BINARY(2);

    private int value;
    RPCPacketDataType(int i){
        this.value=i;
    }
    public int getNumericType(){
        return value;
    }
}

static RPCPacketDataType tmpPacket_packetType;

И мне нужно сделать что-то вроде этого:

case 2:
{
    long intVal = Long.parseLong(thisPart);                             
    if(intVal == 0){
        isBad = true; break;
    }
  tmpPacket_packetType=intVal;
  break;
}

где thisPart это просто строка: String thisPart; И ошибка говорит: Type mismatch: cannot convert from long to RPCCommucatorDefines.RPCPacketDataType

Есть предложения как это исправить?

1 Ответ

2 голосов
/ 27 августа 2011

Вам нужно написать метод, возможно, в RPCPacketDataType:

public static RPCPacketDataType valueOf(int value) {
    ...
}

Затем вызвать его из вашего оператора case.Учитывая, что значение может быть только целым числом, вы почти наверняка должны использовать Integer.parseInt вместо Long.parseLong.

Как реализовать метод valueOf, зависит только от вас - вы могли бы перебирает EnumSet всех значений, пытаясь найти совпадение, или создает HashMap от Integer до RPCPacketDataType или, возможно, просто массив (с проверкой).Это будет зависеть от того, что находится в вашем перечислении, и сколько значений нужно просмотреть.

Обратите внимание, что вы должны также подумать, что делать, если valueOf передано значение, которое не соответствует никакому перечислениюзначение - один из вариантов - вернуть null (и, вероятно, проверить это явно в вызывающем коде);другое - бросить исключение.

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