Как размещение реализации общедоступного метода в частном методе предотвращает нарушение работы потребителей?

Этот вопрос вытекает из нескольких связанных вопросов и в некоторой степени задает первый вопрос, который, похоже, не имеет четкого ответа на основной вопрос ОП:

Я очень хорошо понимаю назначение приватных методов, но мне трудно представить пример, в котором реализация функции в приватном методе не вызовет проблем у потребителя API, а размещение реализации непосредственно в публичном методе вызовет. Это обычная практика в API Java.

Я в основном повторно задаю первый вопрос выше, потому что я не читал ответ, который укрепляет мое понимание. Возьмем тот же пример:

public class Sum {

    private int sum(int a, int b){
        return a + b;
    }

    public int getSum(int a, int b){
        return sum(a, b);
    }

}

В чем преимущество использования приватной функции sum вместо того, чтобы просто помещать результат непосредственно в публичную функцию?

public int getSum(int a, int b) {
    return a + b;
}

Возможно, это не лучший пример, но я очень приветствую и более сложные или реальные примеры.

Опять же, я понимаю, что размещение реализации в частном методе скрывает реализацию и позволяет повторно использовать ее, и в целом это лучшая практика для будущих дополнений. Тем не мение,

  • Как отсутствие его в приватном методе может нарушить работу потребителей API?
  • Должны ли все общедоступные методы создаваться таким образом (всегда размещать реализацию в приватном методе) или где проходит черта?

person Dewick47    schedule 24.10.2018    source источник
comment
Пример с суммой кажется бессмысленным. У вас есть реальный случай?   -  person shmosel    schedule 24.10.2018
comment
Это полезно, если вы хотите, чтобы другие методы в Sum могли использовать исходную реализацию getSum, даже если подклассы могут переопределить ее.   -  person Andy Turner    schedule 24.10.2018
comment
У меня нет реального случая, поэтому я не понимаю аргумент о нарушении работы любого кода, вызывающего публичную функцию. Пример суммы, вероятно, слишком упрощен, чтобы показать это, но отсутствие фактического примера - вот почему я все равно задаю вопрос.   -  person Dewick47    schedule 24.10.2018
comment
Когда я оглядываюсь назад на большинство реализаций структур данных Java, таких как HashMap и LinkedList, вызываемые частные методы обычно просто выделяются для повторного использования. Вот почему я запутался в нарушении аргумента вызывающего абонента.   -  person Dewick47    schedule 24.10.2018


Ответы (1)


Помещение реализации в частные методы, как вы показали, не имеет никакого значения.

Я считаю, что в этом вопросе ошибочно указано отношение между «интерфейсом ‹-> реализацией метода» с «общедоступным методом ‹-> частным методом».

Важно отделить интерфейс от реализации. Потребитель видит только интерфейс. Поставщик функций выбирает/вводит соответствующую реализацию.

person Ben Hu    schedule 24.10.2018