Как реализовать совместное использование кейса для нескольких кейсов с разным контентом? - PullRequest
0 голосов
/ 21 июня 2019

Я получил заявление о переключении, а случаи «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 ]

5 голосов
/ 21 июня 2019

Без какой-либо дополнительной информации единственная опция, которую я вижу здесь, это извлечь вспомогательный метод с такой общей функциональностью:

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 голос
/ 21 июня 2019

Это кажется слишком тривиальным, чтобы упоминать, но вы могли бы просто иметь одинаковые 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
}
...