java中Switch语句中整数类型的使用
我正在用java为我的android应用程序编写一些简单的代码,我发现了这些错误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
大小写表达式必须是常量表达式
,而私有静态最终整数
是常量
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;
}