I want to use startsWith() in switch case in Java, but it expects a String and not a boolean value. I tried to create a wrapper function for it and return a 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 and using java 14/15 with preview or 16+ you can do it like this:
switch (currCmd) {
case null -> System.out.println("INVALID COMMAND!");
case "allProduct" -> warehouseObj.viewItems();
case String s when s.startsWith("buyProduct") -> {
String productId = currCmd.substring(4);
long lProductId=Long.parseLong(productId);
cartProcessor.addItem(currUser.getUserid(),lProductId,currCart,warehouseObj);
}
case "viewCart" -> cartProcessor.viewItems(currUser.getUserid(),currCart);
case "checkout" -> cartProcessor.checkOut(currUser.getUserid(),currCart);
case String s when s.startsWith("delete") -> {
String productId = currCmd.substring(7);
long lProductId =Long.parseLong(productId);
warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
}
case "addProduct" -> {
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!");
}
Using java 8 to 13 personally i would implement it as follows:
switch (currCmd) {
case "allProduct": {
warehouseObj.viewItems();
}
case "viewCart": {
cartProcessor.viewItems(currUser.getUserid(),currCart);
}
case "checkout": {
cartProcessor.checkOut(currUser.getUserid(),currCart);
}
case "addProduct": {
if (!currUser.getIsAdmin()) {
System.out.println("PERMISSION DENIED");
} else {
// remove sc
Scanner sc = new Scanner(System.in);
addProduct2Warehouse(warehouseObj, sc);
}
}
default: {
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.startsWith(delete)) { // todo
String productId = currCmd.substring(7);
long lProductId =Long.parseLong(productId);
warehouseObj.deleteItem(lProductId, currUser.getIsAdmin());
} else {
System.out.println("INVALID COMMAND!");
}
}
}
Hopefully it will help someone.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With