android switch语句中报出case expressions must be constant expressions

今天在将android工程模块化(也就是将工程作为library)的时候,有个switch语句是这样写的:


红线部分报出了异常,但是其它地方照样可以正常使用R文件,引用里面的id。

疑惑之下看了看R文件中的内容,一个被定义为library的工程中R文件的id如下:

public static int call_dialog_in=0x7f040000;
        public static int call_dialog_out=0x7f040001;
        public static int dialog_in=0x7f040002;
        public static int dialog_out=0x7f040003;
        public static int enter_left_to_right=0x7f040004;
        public static int enter_right_to_left=0x7f040005;
        public static int exit_left_to_right=0x7f040006;
        public static int exit_right_to_left=0x7f040007;
        public static int from_top_in=0x7f040008;
        public static int from_top_out=0x7f040009;
        public static int in_righttoleft=0x7f04000a;
        public static int out_righttoleft=0x7f04000b;
        public static int scale_in=0x7f04000c;
        public static int scale_out=0x7f04000d;

在将该工程的libiary属性取消之后,也就是将工程android属性中的is library去掉再clean之后,再看看R文件的id定义,变成如下:

 public static final int call_dialog_in=0x7f040000;
        public static final int call_dialog_out=0x7f040001;
        public static final int dialog_in=0x7f040002;
        public static final int dialog_out=0x7f040003;
        public static final int enter_left_to_right=0x7f040004;
        public static final int enter_right_to_left=0x7f040005;
        public static final int exit_left_to_right=0x7f040006;
        public static final int exit_right_to_left=0x7f040007;
        public static final int from_top_in=0x7f040008;
        public static final int from_top_out=0x7f040009;
        public static final int in_righttoleft=0x7f04000a;
        public static final int out_righttoleft=0x7f04000b;
        public static final int scale_in=0x7f04000c;
        public static final int scale_out=0x7f04000d;

对比一下就可以发现不是library的工程中id定义多了final属性,这就是问题出现的关键地方了。

修改方案就简单了,switch语句中不使用id作为case,或者需要这样用的部分不作为library使用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值