#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 */
}