I want to use .startsWith in switch case in java but it expects String and not a boolean value. I tried to create a wrapper function for it and return String but I am getting an error saying constant expected
I want to convert the following if-else block in switch case
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!");
}
Assuming that currCmd is a string which may look like "buy $PRODUCT_ID" or "delete $PRODUCT_ID" for the commands compared with startsWith, it may be worth to extract the "verb" from the command and use it in switch (using shorter arrow syntax of 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!");
}