【问题标题】:Java switch case statement issueJava switch case语句问题
【发布时间】:2011-08-30 10:16:59
【问题描述】:

我正在尝试在 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”。 有什么建议可以解决这个问题吗?提前谢谢!!!

【问题讨论】:

标签: java enums case switch-statement


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您正在尝试将您的 INT 错误代码与 RPCServerResponseCode 实例进行比较 - 这是不可能的。您需要在 RPCServerResponseCode 类中使用方法 getByValue 为您进行转换。之后,您可以在 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;
                }
            }
    
        }
    

    【讨论】:

      【解决方案3】:

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

      这应该可行:

      switch(RPCServerResponseCode.getByValue(errorCode)){
      

      【讨论】:

        【解决方案4】:

        你可以说

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 2014-07-06
          相关资源
          最近更新 更多