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();
}
答案 0 :(得分:3)
从另一个角度来看这可能会很好。为什么会有转换?看起来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()
,但恕我直言,这完全取决于代码的更大背景。
看起来应该将不同的付款类型实现为枚举值。
答案 1 :(得分:0)
解决此问题的一种方法是使用switch
switch (customerPaymentInfo.getPtType()) {
case CASH:
case CARD:
test();
break;
default:
throw new IllegalArgumentException("Payment Type is Not Correct.");
}
switch (customerPaymentInfo.getPtType()) {
case CASH:
otherMethod1();
break;
case CARD:
otherMethod2();
break;
default:
throw new IllegalArgumentException("Payment Type is Not Correct.");
}
但是现在你在switch
语句上有冗余。
另一种方法是首先检查IllegalArgumentException
,然后运行test()
然后执行switch语句:
if (!customerPaymentInfo.getPtType().equals(CASH) || !customerPaymentInfo.getPtType().equals(CARD))
throw new IllegalArgumentException("Payment Type is Not Correct.");
test();
switch(customerPaymentInfo.getPtType()) {
//switch code
}
最后,只有Java8解决方案,如果你有很多这样的情况(他们有一个共同的调用和一个特定的调用),你可以将它们分组用于公共调用,对于特定的部分,你可以使用枚举和函数的映射
switch (customerPaymentInfo.getPtType()) {
case CASH:
case CARD:
test();
functionMap.get(customerPaymentInfo.getPtType()).apply(holderOfOtherMethod);
break;
default:
throw new IllegalArgumentException("Payment Type is Not Correct.");
}
答案 2 :(得分:-1)
case CASH:
case CARD:
test();
if(customerPaymentInfo.getPtType().equals("CASH"))
otherMethod1();
else
otherMethod2();
break;