我正在尝试使用开关盒。但它说我不能传递一个字符串:(
protected void onListItemClick(ListView l, View v, int position, long id) {
// super.onListItemClick(l, v, position, id);
String selection = l.getItemAtPosition(position).toString();
Log.i("Harsha", selection);
switch (selection) {
case "Compose":
break;
case "Inbox":
break;
case "Drafts":
break;
case "Sent":
break;
default:
break;
}
}
错误是
Cannot switch on a value of type String. Only convertible int values or enum constants are permitted
答案 0 :(得分:4)
switch表达式必须是type char,byte,short或int。所有情况 标签必须是不变的 表达式 - 表达式必须 仅包含文字或命名 用常量初始化的常量 表达式 - 并且必须可分配给 切换表达式的类型。
它是什么! Java不允许您为switch case语句传递String,事实上,新Proposal可能被拒绝。 (在某个博客上阅读,对不起,没有来源)
但这并不意味着你不能通过另一种方法来做到这一点。
替代
1)使用listitem的位置,而不是字符串。
2)使用Enum
3)将其存储在Map<String,Integer>
(甚至数组)中,并使用SWitch案例中的值
编辑:就个人而言,我会添加4个常量并按此方式执行
final int MENU_COMPOSE = 0; //should be equal to the index in your array.
final int MENU_INBOX = 1;
final int MENU_DRAFTS = 2;
final int MENU_SENT = 3;
switch (position) {
case MENU_COMPOSE: //Compose, add comments never the less.
break;
case MENU_INBOX: //Inbox
break;
case MENU_DRAFTS: //Drafts
break;
case MENU_SENT: //Sent
break;
default:
break;
}
答案 1 :(得分:2)
是的,在Java switch case
中,运算符只接受整数值。请改用if else
。