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

来源:互联网 发布:淘宝达人大v认证 编辑:程序博客网 时间:2024/05/21 06:45

今天在将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 0
原创粉丝点击