switch (customerPaymentInfo.getPtType()) {
case CASH:
test();
otherMethod1();
break;
case CARD:
test();
otherMethod2();
break;
default:
throw new IllegalArgumentException("Payment Type is Not Correct.");
}
在上面的代码中,我有一种通用的方法,对于CASH或CARD都可以执行。
开关盒是否可以单次使用?
对于If块的示例,我们可以编写以下代码:
if (customerPaymentInfo.getPtType().equals("CASH") || customerPaymentInfo.getPtType().equals("CARD")) {
test();
}
最佳答案
从另一个角度看这也许是一件好事。为什么根本要开关?看来otherMethod1()
和otherMethod2()
以不同的方式完成同一件事,具体取决于付款方式。
我映像othMethod1()
可能类似于processPaymentByCash()
和processPaymentByCard()
。然后,对于这些付款类型,应由不同的类来处理实现上的差异:
class PaymentCash extends Payment {
processPayment() {
test();
// Code from othermethod1
}
}
class PaymentCard extends Payment {
processPayment() {
test();
// Code from othermethod2
}
}
class PaymentWhatever extends Payment {
processPayment() {
throw new IllegalArgumentException("Payment Type is Not Correct.");
}
}
然后,将上面的开关简单地替换为这一衬套:
customerPaymentInfo.getPtType().processPayment();
现在,您在代码中仍然有两个对
test()
的调用,但是恕我直言,这实际上取决于代码的更大上下文。看起来还应该将不同的付款类型实现为枚举值。
关于java - 重构交换码中的通用码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43894099/