我在图书馆项目中有一个 Switch 引用来自 R.java 的资源 ID:
switch (code) {
case R.id.code_one:
blah();
break;
case R.id.code_two:
bleh();
break;
}
从 ADT 14 开始,R 字段不再是最终的,因此 Google 建议将 switch 更改为嵌套 if。很公平。
但是,我想知道为什么这不起作用:
final int CODE_ONE=R.id.code_one, CODE_TWO=R.id.code_two;
switch (code) {
case CODE_ONE:
blah();
break;
case CODE_TWO:
bleh();
break;
}
或这个:
class blih {
private final static int CODE_ONE=R.id.code_one, CODE_TWO=R.id.code_two;
void bluh(int code) {
switch (code) {
case CODE_ONE:
blah();
break;
case CODE_TWO:
bleh();
break;
}
}
}
他们都抱怨错误“Case statements must be constant expressions”......不是吗,特别是第一个?无论 R.id.xxx 可能是哪个值,我不是将其“最终化”为快照常量吗?