Наименование метода: включение или исключение типа параметра несколькими похожими методами - PullRequest
0 голосов
/ 01 февраля 2011

Когда вы сталкиваетесь с классом, в котором есть несколько похожих методов, работающих с разными типами параметров, включаете ли вы какое-либо описание параметров в имя метода, или вы сохраняете то же имя и полагаете, что сами параметры предоставляют достаточно Информация? Сравните два приведенных ниже примера:

interface Option1 {
    update(ObjectA);
    update(ObjectB);
    update(List<Object>);
}

interface Option2 {
    updateA(ObjectA);
    updateB(ObjectB);
    updateAll(List<Object>);
}

Я слышал следующие аргументы:

  • Вариант 1 лучше, так как он не содержит избыточной информации
  • Вариант 2 лучше, так как код более читабелен и проще в обслуживании

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Это зависит. Перегрузка метода существует, потому что это полезно. Однако это также может вызвать у вас горе.

Если вы рассматриваете возможность перегрузки, рассмотрите:

  • Методы решают разные проблемы?
  • Будет ли ухудшена читаемость - сможет ли читатель определить, какой метод вызывается?
  • Возможно ли, что ваш интерфейс может быть смешан с другими с похожими именами методов?
  • Возможно ли, что аргументы реализуют более одного из типов параметров? В таком случае может возникнуть неоднозначность, и компилятор может потребовать, чтобы вы ее исправили.

Например:

  • Java String.indexOf() перегружен. Все перегрузки имеют одинаковые намерения. Не будет никаких дополнительных методов indexOf (), смешанных с листовым классом.
  • setX () обычно , а не с именами set() - на все вышеупомянутые вопросы можно ответить "да"
0 голосов
/ 01 февраля 2011

Для статически типизированного языка, который поддерживает перегрузку методов, опция 1.

Для работы с иерархиями объектов, вариант 1.

Для всех остальных случаев я бы предложил вариант 2.

Мои 2 цента. :)

...