Android的Switch语句case expressions must be constant expressions错误的解决方法

解决方案

今天调试一个开源代码的时候出现“case expressions must be constant expressions”的错误,所有错误都指向包含R.id的地方,形如:

switch(view.getId()) {
case R.id.button1:
    ...;
    break;
case R.id.button2:
    ...;
    break;
}

出现这种错误的原因是本工程被指定为Android library project,右键工程选择属性,出现如下图片。
这里写图片描述
如图中红色所示,取消勾选”Is Library”即可编译通过。

不过话说回来,为啥Android Library工程会出现这种错误,要是项目本来就要指定为”Is Library”该如何处理。
原因是对于普通的Android工程,生成的R文件的类声明如下所示:

public static final int main=0x7f030000;

但是对于library工程,其声明会是:

public static int main=0x7f030000;

由于缺少了final,不被认为是常量,从而导致switch…case编译出错。
解决方案是将switch语句转化为if-else语句

  1. 对于eclipse环境,光标定位在switch语句上,按ctrl+1键然后选择“Convert ‘switch’ to ‘if-else’”。
  2. 对于Android Studio环境,光标定位在switch语句上,按Alt+Enter键然后选择“Replace ‘switch’ with ‘if’”。

其实这篇文章更像是翻译,Stack Overflow上有完整的说明。

参考文献

http://stackoverflow.com/questions/9092712/switch-case-statement-error-case-expressions-must-be-constant-expression

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值