如何针对不同内容的多个案例实现案例共享?

时间:2019-06-21 14:23:58

标签: java switch-statement

我得到一个switch语句,“ BMW”和“ Mercedes”案件共享几乎相同的内容,差异不大(更新方法)。

对于这些情况下的内容,我不想重复所有代码。有什么办法可以解决这个问题?

switch (car) {

  case "BMW":
    updateBmwSpecs();
    ...//Same code with Mercedes case
    break;

  case "Mercedes":
    updateMercedesSpecs();
    ...//Same code with BMW case
    break;

  case "Ferrari":
    //content
    break;

  ...//Remaining cases
}

2 个答案:

答案 0 :(得分:5)

没有任何更多信息,我在这里看到的唯一选择是提取具有该常用功能的辅助方法:

switch (car) {
    case "BMW":
        updateBmwSpecs();
        doCommon();
        break;

    case "Mercedes":
        updateMercedesSpecs();
        doCommon();
        break;

    case "Ferrari":
        break;

    // remaining cases
}

private void doCommon() {
    // do whatever logic be common to BMW and Mercedes
    // e.g. take joy rides through the city and get too many car washes
}

答案 1 :(得分:1)

这似乎微不足道,但您可以为两者都拥有相同的case并在这种情况下添加if/else以确定要调用的方法。

switch (car) {
    case "BMW":
    case "Mercedes":
        if (car.equals("BMW")) {
            updateBmwSpecs();
        } else {
            updateMercedesSpecs();
        }
        ...//Same code for Mercedes and BMW case
        break;

    ...//Remaining cases
}

还是将汽车类型的参数添加到updateSpecs方法中?

switch (car) {
    case "BMW":
    case "Mercedes":
        updateCarSpecs(car);
        ...//Same code for Mercedes and BMW case
        break;

    ...//Remaining cases
}