【问题标题】:Using startsWith() method in switch case in Java在 Java 的 switch case 中使用 .startsWith
【发布时间】: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


【解决方案1】:

假设currCmd 是一个字符串,与startsWith 相比,命令看起来像"buy $PRODUCT_ID""delete $PRODUCT_ID",可能值得从命令中提取“动词”并在@987654325 中使用它@(使用 Java 12+ 的较短箭头语法):

String cmd = currCmd.split(" ")[0];
switch (cmd) {
    case ALL_PRODUCT -> warehouseObj.viewItems();
    case BUY_PRODUCT -> {
        String productId = currCmd.substring(4);
        long lProductId = Long.parseLong(productId);
        cartProcessor.addItem(currUser.getUserid(), lProductId, currCart, warehouseObj);
    }
    case VIEW_CART -> cartProcessor.viewItems(currUser.getUserid(), currCart);
    case CHECKOUT -> cartProcessor.checkOut(currUser.getUserid(), currCart);
    case DELETE -> {
        String productId = currCmd.substring(7);
        long lProductId = Long.parseLong(productId);
        warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
    }
    case ADD_PRODUCT -> {
        if (!currUser.getIsAdmin()) {
            System.out.println("PERMISSION DENIED");
        } else {
            // remove sc
            Scanner sc = new Scanner(System.in);
            addProduct2Warehouse(warehouseObj, sc);
        }
    }
    default -> System.out.println("INVALID COMMAND!");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多