【发布时间】:2011-06-12 04:12:54
【问题描述】:
我的 switch/case 语句有问题。错误说:“案例表达式必须是常量表达式”。我理解错误,我可以使用 If 解决它,但有人可以告诉我为什么 case 表达式必须在 switch/case 中保持不变。 我的错误代码示例:
public boolean onOptionsItemSelected(MenuItem item) {
int idDirectory = ((MenuItem) findViewById(R.id.createDirectory)).getItemId();
int idSuppression = ((MenuItem) findViewById(R.id.recycleTrash)).getItemId();
int idSeeTrash = ((MenuItem) findViewById(R.id.seeTrash)).getItemId();
switch (item.getItemId()) {
case idDirectory:
createDirectory(currentDirectory);
break;
case idSuppression:
recycleTrash();
break;
case idSeeTrash:
seeTrash();
break;
}
return super.onOptionsItemSelected(item);
}
谢谢你的解释!!
【问题讨论】:
-
你为什么使用
findViewById().getItemId()?如果你已经有了id,就不需要获取item来获取id! -
switch 语句不好闻...我建议您考虑使用多态性或适配器模式以获得更好看的代码。此外,您可以完全避免此类问题。
-
@Bnjmn 我同意,特别是当情况经常重复时。如果你很少使用它可能没问题。此外,我有时将它与多态一起使用来创建初始的具体实例。
-
@Bnjmn:由于 Dimitri 使用的是 Android,因此他的
MenuItem对象很可能在 xml 中定义,并且(据我所知)如果不放弃MenuInflater.inflate()的简单性,就不能轻易地对其进行子类化。
标签: java android switch-statement