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/

10-10 11:50