【发布时间】:2022-01-12 14:11:04
【问题描述】:
我想在 java 中的 switch case 中使用 .startsWith,但它需要 String 而不是布尔值。我试图为它创建一个包装函数并返回字符串,但我收到一条错误消息constant expected
我想在 switch case 中转换下面的 if-else 块
if (currCmd.equals(allProduct)) {
warehouseObj.viewItems();
} else if (currCmd.startsWith(buyProduct)) { // todo
String productId = currCmd.substring(4);
long lProductId=Long.parseLong(productId);
cartProcessor.addItem(currUser.getUserid(),lProductId,currCart,warehouseObj);
} else if (currCmd.equals(viewCart)) {
cartProcessor.viewItems(currUser.getUserid(),currCart);
} else if (currCmd.equals(checkout)) {
cartProcessor.checkOut(currUser.getUserid(),currCart);
} else if (currCmd.startsWith(delete)) { // todo
String productId = currCmd.substring(7);
long lProductId =Long.parseLong(productId);
warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
} else if (currCmd.equals(addProduct)) {
if (!currUser.getIsAdmin()) {
System.out.println("PERMISSION DENIED");
} else {
// remove sc
Scanner sc = new Scanner(System.in);
addProduct2Warehouse(warehouseObj, sc);
}
}
else {
System.out.println("INVALID COMMAND!");
}
【问题讨论】:
-
你不能为此使用开关盒,故事结束。
-
这在 java 17 之前是不可能的。switch/case 不允许这种语句。 Java17 引入了pattern matching,它很可能用于将这种行为压缩到其中。
-
@f1sh 请注意,它仍然是 Java 17 中的预览功能(因此还不是永久的语言功能,除非您明确告诉编译器您要使用预览功能,否则它不会起作用)。跨度>
-
@Jesper 是的,你当然是对的。这只是我想到的唯一一件事,这是如何以某种方式实现的。
标签: java switch-statement