Когда вашему методу нужен новый параметр, но только при определенных обстоятельствах …?

#java #overloading

#java #перегрузка

Вопрос:

У меня есть метод

 myMethod(int a, String b)
  

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

Должен ли я просто изменить сигнатуру метода на

 myMethod(int a, String b, int newParameter)
  

и передавать значения null во всех случаях, когда этот параметр не нужен?

Возможно, наиболее удобным было бы оставить сигнатуру старого метода и заставить ее вызывать новый метод с параметром null, поэтому мне не нужно ничего менять в другом месте кода, например

 myMethod(int a, String b) { return myMethod(a, b, null); }
  

Или мне нужно взглянуть на это по-другому?

Все комментарии очень важны!


Обновить

 myMethod(int a, String b)
  

выполняет целую кучу операций, включая вызов

 anotherMethod()
  

единственное отличие, которое должно произойти при включении newParameter, заключается в том, что anotherMethod вызывается следующим образом

 anotherMethod(newParameter)
  

Ответ №1:

Просто перегрузите метод, myMethod который может принимать дополнительный параметр, и вызывайте этот конкретный метод, когда вам нужно. Просто вызовите метод, который вам нужен. Я не вижу никакой необходимости выполнять косвенный вызов из метода к другому перегруженному методу.

 myMethod(int a, String b) { return myMethod(a, b, null); }
  

Вот вы каким образом вызываете перегруженный метод. Просто измените код сейчас, чтобы он сам вызывал необходимый метод, иначе программа превратится в беспорядок, когда станет больше.

Ответ №2:

ИМХО, я думаю, вы на правильном пути. Обычно я оставляю сигнатуру старого метода и вызываю метод с дополнительными параметрами. Если вы посмотрите на код commons, вы увидите, что тот же метод используется часто.

Ответ №3:

Если вызывающий метод знает, когда необходим дополнительный параметр, тогда да, я бы склонялся ко второму подходу. Вы видите это все время с конструкторами. С другой стороны, если myMethod можно разбить на его составляющие, вы могли бы вызвать соответствующую составную часть в зависимости от значения ‘a’.

Ответ №4:

Если вашей функции нужно выполнять две отдельные вещи, то вы должны сделать это двумя отдельными функциями, да. Я думаю, это намного понятнее, чем иметь одну функцию, которая принимает аргумент типа «флаг поведения».

Ответ №5:

Лично я думаю, что оставить сигнатуру старого метода и заставить ее вызывать новый метод с параметром null было бы лучшим вариантом. Я бы просто написал интеллектуальный код, который бы правильно обрабатывал случай «null».

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

Ответ №6:

Почему бы вам не сделать это вот так?

 myMethod(int a, String b) {

AnotherMethod();

}

myMethod(int a, String b, int newParameter) {

AnotherMethod(newParameter);

}
  

Альтернатива:

 myMethod(int a, String b, int newParameter) {

if (newParameter != -1) 
{
AnotherMethod(newParameter);
} else {
AnotherMethod();
}
  

и пусть -1 будет некоторым значением, которое вы никогда не будете использовать, представляющим «null»

Ответ №7:

Перегрузку лучше всего выполнить следующим образом:

 /* Some value that is most common to use in your program. */
private final int DEFAULT_PARAM_VALUE = 0;

public void myMethod (int a, String b) {
    myMethod (a, b, DEFAULT_PARAM_VALUE);

public void myMethod (int a, String b, int newParameter) {
    /* do all your main stuff here */

    anotherMethod (newParameter);
}

public void anotherMethod (int param) {
    /* do other stuff */
}