gpt4 book ai didi

java - 重构switch代码中的公共(public)代码

转载 作者:行者123 更新时间:2023-11-30 07:54:41 26 4
gpt4 key购买 nike

switch (customerPaymentInfo.getPtType()) {
case CASH:
test();
otherMethod1();
break;
case CARD:
test();
otherMethod2();
break;
default:
throw new IllegalArgumentException("Payment Type is Not Correct.");
}

在上面的代码中,我使用了一种通用方法,其中一种方法针对 CASH 或 CARD 两种情况执行。

switch case 是否可以单次使用?

例如,在 If block 的情况下,我们可以编写以下代码:

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 - 重构switch代码中的公共(public)代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com