Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Структура однотипных функций


Автор: DissDoc 7.10.2008, 20:21
Столкнулся с такой проблемой, как необходимость писать по нескольку одних и тех же функций с разным количеством параметров(((
Что же мне делать? Объясню.
Вот есть две функции
Код

public int func(int a) { }
public int func(int a, int b) { }

Но мне пишет ошибку в тот момент когда я хочу объединить несколько функций в одну, как это делается в php или в C/C++
Код

public int func(int a, int b = -1) { } // ошибочно!

Как можно сделать? Или в Java только несколько функций писать?

Автор: Shaggie 7.10.2008, 20:33
DissDoc, есть такая проблема. Обычно в таких случаях один из методов используется как адаптер:
Код

public int func(int a) {
    return func(a, 1);
}

public int func(int a, int b) {
    // основной код
}

Автор: DissDoc 7.10.2008, 20:50
Аааа, ну по сути получается тоже самое... Т.е. не стоит мудрить, а проще написать две функции... Очень жаль... Я думал, может я его не допонимаю ;-)

Автор: garbuz 7.10.2008, 20:56
По-моему начиная с пятерки, джава поддерживает переменное количество аргументов в методе... smile 

Автор: Shaggie 8.10.2008, 05:46
Да, но только если они одного типа, к тому же приходится следить за количеством аргументов и исчезает внятное именование переменных.

Автор: Dims 10.10.2008, 12:21
В джаве специально нет значений по умолчанию, чтобы заставить программера явно описать свои желания.

Автор: mbasil 13.10.2008, 13:55
Действительно параметры должны быть однотипные, только если использовать объекты и интерфейсы эта проблема разрешима:
Код

public class Statistics {
 public float average(int... nums) {
   int sum = 0;
   for ( int x : nums ) {
         sum += x;
    }
  return ((float) sum) / nums.length;
 }
}
. . .
float gradePointAverage = stats.average(4, 3, 4);
float averageAge = stats.average(24, 32, 27, 18);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)