Java switch case 语句问题

发布于 12-01 20:15 字数 1398 浏览 2 评论 0原文

我正在尝试在 Android 应用程序中使用 switch 语句,其中我必须检查整数是否等于某些枚举的值。代码如下所示:

    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”。 有什么建议如何解决这个问题吗?提前致谢!!!

I'm trying to use a switch statement in Android aplication,where I have to check if an integer is equal to some of the Enum's value.The code goes like this :

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

    }

}

And my switch statement looks like this :

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

    }

But I get error saying this : "Type mismatch: cannot convert from RPCCommucatorDefines.RPCServerResponseCode to int".
Any suggestions how to solce that issue? Thanks in advance!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

蒲公英的约定2024-12-08 20:15:22

错误代码int。应为 RPCServerResponseCode 类型,因此您可以使用类似以下内容的内容:

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

errorcode is int. Should be of type RPCServerResponseCode, so you could use something like:

switch (RCPServerResponseCode.getByValue(errorcode))
{
    ...
}
无人问我粥可暖2024-12-08 20:15:22

您正在尝试将 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;
            }
        }

    }

You're trying to compare your INT error code to a RPCServerResponseCode instance - This isn't possible. You need to use the method getByValue in your RPCServerResponseCode class to do the conversion for you. After that, you can use the result (Which will be a RPCServerResponseCode instance) in your switch statement:

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

    }
悍妇囚夫2024-12-08 20:15:22

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

这应该有效:

switch(RPCServerResponseCode.getByValue(errorCode)){

Java enums are fully-fledged objects and cannot be implicitly cast to integers.

This should work:

switch(RPCServerResponseCode.getByValue(errorCode)){
口干舌燥2024-12-08 20:15:22

你可以说

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

you can say

int errorCode=4001;
RPCServerResponseCode code = RPCServerResponseCode.getByValue(errorCode);
switch(code){
...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文