我用java为我的android应用程序编写了一些简单的代码,我得到了这些错误。
case expressions must be constant expressions
而private static final Integer
是常数
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;
}
这是因为我使用了Integer Type
,然后我将类型改为int
,并解决了问题。
我的问题是,为什么我们不能使用Integer
作为一个案例表达式。Docs说:“开关可以处理字节、短、字符和int原始数据类型,它还可以处理枚举类型(在Enum类型中讨论)、字符串类和一些包装某些原始类型的特殊类:字符、字节、短和整数”。,虽然变量是常数,但我读了这个问题,但是没有得到任何东西
发布于 2014-10-01 10:33:46
常量表达式在开关语句中用作大小写标签(§14.11 ),对于赋值转换(§5.2 )和.
Definition of Constant Expression §15.28
编译时常量表达式是指原语类型的值或不突然完成的字符串的表达式。
现在,在上面的场景中,编译器正在寻找常量表达式,因为编译器在编译时应该知道,time.As声明Integer
实际上不是编译器的常量表达式。
发布于 2014-10-01 10:35:13
"Docs行“Docs说:开关适用于字节、短、字符和int原语数据类型,它也适用于枚举类型(在Enum类型中讨论)、字符串类和一些包装某些原始类型的特殊类:字符、字节、短和整数。
switch(expressions used here)
而不是用case
语句。
您可以将原语类型int
与case
一起使用,然后在任何时候将Integer.valueOf(your_int_value);
作为Integer
使用。
发布于 2014-10-01 10:46:01
java不允许在开关中使用对象。我们可以使用字节、int、char和枚举值作为开关表达式。在jdk1.7中,我们可以使用字符串作为开关表达式。要对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;
}
https://stackoverflow.com/questions/26139028
复制相似问题