Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中Switch语句中整数类型的使用_Java_Switch Statement - Fatal编程技术网

java中Switch语句中整数类型的使用

java中Switch语句中整数类型的使用,java,switch-statement,Java,Switch Statement,我正在用java为我的android应用程序编写一些简单的代码,我发现了这些错误 大小写表达式必须是常量表达式,而私有静态最终整数是常量 private static final Integer INVALID_USER = 901; private static final Integer SENDING_FAILED = 902; private static final Integer OK = 903; /* * * And some more project related d

我正在用java为我的android应用程序编写一些简单的代码,我发现了这些错误

大小写表达式必须是常量表达式
,而
私有静态最终整数
是常量

private static final Integer INVALID_USER = 901;
private static final Integer SENDING_FAILED = 902;
private static final  Integer OK = 903;
/*
 *
 *  And some more project related declaration...
 *
 */


        switch (responseCode){
            case INVALID_USER:

                    // logout
                    break;

            case SENDING_FAILED:

                    //resend request
                    break;

            case OK:
                    break;
        }
这是因为我使用了
整数类型
,然后我将类型更改为
int
,问题就解决了

我的问题是为什么我们不能使用
整数
作为case表达式。虽然变量是常量 我读书,但什么也没得到

常量表达式用作switch语句中的大小写标签( §14.11),并对转让转换具有特殊意义( §5.2)和

编译时常量表达式是表示值的表达式 属于基本类型或不突然完成的字符串

现在在上面的场景中,编译器正在寻找编译器在编译时应该知道的常量表达式。如上所述,
整数实际上不是编译器的常量表达式。

文档行Docs说:开关与byte、short、char和int基元数据类型一起工作。它还适用于枚举类型(在枚举类型中讨论)、字符串类和一些包装某些基元类型的特殊类:Character、Byte、Short和Integer“ 是为了

而不是使用
case
语句


您可以将原语类型
int
case
一起使用,然后使用
Integer.valueOf(您的\u int\u值)
无论您想将其作为
整数
java都不允许在开关中使用对象。我们可以使用byte、int、char和枚举值作为开关表达式。在jdk1.7中,我们可以使用字符串作为开关表达式。要对wraper类对象执行此操作,需要使用wrapper类的valueOf方法

private static final Integer INVALID_USER = 901;
private static final Integer SENDING_FAILED = 902;
private static final  Integer OK = 903;
/*
 *
 *  And some more project related declaration...
 *
 */


        switch (responseCode){
            case INVALID_USER.valueOf():

                    // logout
                    break;

            case SENDING_FAILED.valueOf():

                    //resend request
                    break;

            case OK.valueOf():
                    break;
        }

我已经给出了那个问题的链接,但我没有得到我的答案,这个问题只是解决了答案,没有给出解释开关只能处理原语、枚举值和(因为Java 7)字符串。你是不是故意错过了;903之后?不是,这只是复制粘贴中的一个错误。这就是为什么它给出了编译时错误语法不正确的原因
private static final Integer INVALID_USER = 901;
private static final Integer SENDING_FAILED = 902;
private static final  Integer OK = 903;
/*
 *
 *  And some more project related declaration...
 *
 */


        switch (responseCode){
            case INVALID_USER.valueOf():

                    // logout
                    break;

            case SENDING_FAILED.valueOf():

                    //resend request
                    break;

            case OK.valueOf():
                    break;
        }