Java switch case语句问题

时间:2011-08-30 10:16:59

标签: java enums case switch-statement

我正在尝试在Android应用程序中使用switch语句,我必须检查一个整数是否等于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 个答案:

答案 0 :(得分:6)

errorcodeint。应该是RPCServerResponseCode类型,所以你可以使用类似的东西:

switch (RCPServerResponseCode.getByValue(errorcode))
{
    ...
}

答案 1 :(得分:2)

您尝试将INT错误代码与RPCServerResponseCode实例进行比较 - 这是不可能的。您需要使用getByValue类中的RPCServerResponseCode方法为您进行转换。之后,您可以在switch语句中使用结果(这将是RPCServerResponseCode实例):

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

    }

答案 2 :(得分:2)

Java枚举是完全成熟的对象,不能隐式转换为整数。

这应该有效:

switch(RPCServerResponseCode.getByValue(errorCode)){

答案 3 :(得分:2)

你可以说

int errorCode=4001;
RPCServerResponseCode code = RPCServerResponseCode.getByValue(errorCode);
switch(code){
...
}