Проблема с инструкцией переключения Java - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь использовать оператор switch в приложении Android, где я должен проверить, равно ли целое число некоторому значению Enum. Код выглядит так:

    public enum RPCServerResponseCode{


        E_INCORRECT_LOGIN(4001),                
        E_ACCOUNT_DISABLED(4002),
        E_ACCOUNT_NOT_ACTIVE(4003);


        private int value;
        private RPCServerResponseCode(int i) {
            this.value=i;
        }
        public static RPCServerResponseCode getByValue(int i) {
             for(RPCServerResponseCode dt : RPCServerResponseCode.values()) {
                 if(dt.value == i) {
                     return dt;
                 }
             }
             throw new IllegalArgumentException("No datatype with " + i + " exists");
         }

    }

}

И мой оператор switch выглядит так:

int errorCode;
switch(errorCode){

            case  RPCServerResponseCode.E_INCORRECT_LOGIN :
            {
                    if (user.isAuthenticated)
                    {
                        // logout before login
                    }
                    break;
            }
            case RPCServerResponseCode.E_ACCOUNT_NOT_ACTIVE:  
            {
                if (user.isAuthenticated)
                {
                    //logout
                }
                break;
            }
        }

    }

Но я получаю сообщение об ошибке: «Несоответствие типов: невозможно преобразовать RPCCommucatorDefines.RPCServerResponseCode в int». Любые предложения, как решить эту проблему? Заранее спасибо !!!

Ответы [ 4 ]

6 голосов
/ 30 августа 2011

errorcode - это int. Должен иметь тип RPCServerResponseCode, чтобы вы могли использовать что-то вроде:

switch (RCPServerResponseCode.getByValue(errorcode))
{
    ...
}
2 голосов
/ 30 августа 2011

можно сказать

int errorCode=4001;
RPCServerResponseCode code = RPCServerResponseCode.getByValue(errorCode);
switch(code){
...
}
2 голосов
/ 30 августа 2011

Перечисления Java являются полноценными объектами и не могут быть неявно преобразованы в целые числа.

Это должно работать:

switch(RPCServerResponseCode.getByValue(errorCode)){
2 голосов
/ 30 августа 2011

Вы пытаетесь сравнить свой код ошибки INT с экземпляром RPCServerResponseCode - это невозможно. Вам нужно использовать метод getByValue в вашем классе RPCServerResponseCode, чтобы выполнить преобразование за вас. После этого вы можете использовать результат (который будет RPCServerResponseCode экземпляром) в вашем выражении switch:

int errorCode;
RPCServerResponseCode responseCode = RPCServerResponseCode.getByValue(errorCode);

switch(responseCode){

            case  RPCServerResponseCode.E_INCORRECT_LOGIN :
            {
                    if (user.isAuthenticated)
                    {
                        // logout before login
                    }
                    break;
            }
            case RPCServerResponseCode.E_ACCOUNT_NOT_ACTIVE:  
            {
                if (user.isAuthenticated)
                {
                    //logout
                }
                break;
            }
        }

    }
...