необязательный параметр Java в методах - PullRequest
3 голосов
/ 22 февраля 2012

Я хочу создать метод, который принимает 1 обязательный параметр и 1 необязательный параметр, но я нашел, как создать необязательный массив, используя параметр (int ... b), но это для массива, я Я хочу сделать это, просто либо это значение равно нулю, либо пользователь ввел его, я могу сделать это, сделав 2 метода с одинаковым именем, но один с одним параметром и один с 2 параметрами, но это можно сделать только одним методом

Спасибо

Ответы [ 5 ]

7 голосов
/ 22 февраля 2012

Нет, Java не поддерживает необязательные параметры. Другой альтернативой перегрузке (которая не имеет большого смысла для двух параметров, но имеет смысл для большего) является использование типа компоновщика, который представляет все параметры - вы можете предоставить конструктор для компоновщика, который содержит необходимые параметры, а затем установщик для каждого из необязательных параметров, заставляющий установщик возвращать сам построитель. Так что вызов метода становится примерно таким:

foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10));
4 голосов
/ 22 февраля 2012

Что вам нужно, так это поддержка аргументов по умолчанию. У Java нет такой возможности, но она более или менее имитирует эту возможность.

Один простой способ - использовать перегрузку метода.

Другой подход заключается в непосредственном выявлении особых случаев и последующей замене значений по умолчанию.

Вот пример смешивания обоих этих подходов Иво Лиммен :

public void test() {
   this.test(null, null);
}
public void test(String p1) {
   this.test(null, null);
}
public void test(String p1, String p2) {
   if(p1 == null) {
      ...
   } else {
      ...
   }
   if(p2 == null) {
      ...
   } else {
      ...
   }
}

Очень интересный подход, который я нашел, заключается в использовании шаблона Design Builder. Вот пример здесь

Здесь также есть интересная дискуссия здесь

1 голос
/ 22 февраля 2012

В методах Java нет значений по умолчанию для параметров. Или используйте varargs или перегрузку метода.

1 голос
/ 22 февраля 2012

Нет, это именно то, что перегрузка метода для

0 голосов
/ 22 февраля 2012

В Java это выполняется с помощью метода перегрузка метода .Вы можете создать несколько методов с одинаковым именем, но разными параметрами.

Например:

void method1(String arg1){ 
  // only one argument, here you can delegate the work of this method to the implementation that takes the most parameters and pass null for the optional parameters.
    method1(arg1, null);
}

void method1(String ar1, String arg2){
  // do work, handle the case where arg2 is null.
}

Клиенты вашего кода могут вызывать любой из них.Для них это выглядит так, как будто второй аргумент является необязательным.

...