Java switch case 语句问题

发布于 2024-12-01 20:15:22 字数 1398 浏览 0 评论 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 和您的相关数据。
原文