Java-конструктор/метод с дополнительными параметрами?
Возможный дубликат:
Дополнительные параметры Java
Я знаю, что в PHP, если вы хотите вызвать функцию с меньшими параметрами, вы объявляете такую функцию, как:
function foo(int param1, int param2 = "2");
и теперь я могу вызвать foo(2)
, а param2
будет установлено в 2.
Я попытался сделать это в конструкторе Java, но, похоже, это невозможно. Есть ли способ сделать это, или мне просто нужно объявить два конструктора?
Спасибо!
Ответы
Ответ 1
В Java нет понятия необязательных параметров со значениями по умолчанию либо в конструкторах, либо в методах. Вы в основном застряли в перегрузке. Однако вы легко строите конструкторы, поэтому вам не нужно повторять код:
public Foo(int param1, int param2)
{
this.param1 = param1;
this.param2 = param2;
}
public Foo(int param1)
{
this(param1, 2);
}
Ответ 2
Java не поддерживает параметры по умолчанию. Вам нужно будет иметь два конструктора, чтобы делать то, что вы хотите.
Альтернативой, если имеется множество возможных значений с настройками по умолчанию, является использование шаблона Builder, посредством которого вы используете вспомогательный объект с сеттерами.
например.
public class Foo {
private final String param1;
private final String param2;
private Foo(Builder builder) {
this.param1 = builder.param1;
this.param2 = builder.param2;
}
public static class Builder {
private String param1 = "defaultForParam1";
private String param2 = "defaultForParam2";
public Builder param1(String param1) {
this.param1 = param1;
return this;
}
public Builder param2(String param1) {
this.param2 = param2;
return this;
}
public Foo build() {
return new Foo(this);
}
}
}
который позволяет вам сказать:
Foo myFoo = new Foo.Builder().param1("myvalue").build();
который будет иметь значение по умолчанию для param2
.
Ответ 3
Вы можете имитировать его с помощью varargs, однако тогда вы должны проверить его на слишком много аргументов.
public void foo(int param1, int ... param2)
{
int param2_
if(param2.length == 0)
param2_ = 2
else if(para2.length == 1)
param2_ = param2[0]
else
throw new TooManyArgumentsException(); // user provided too many arguments,
// rest of the code
}
Однако этот подход не является хорошим способом сделать это, поэтому лучше использовать перегрузку.
Ответ 4
Вы можете использовать varargs для дополнительных параметров:
public class Booyah {
public static void main(String[] args) {
woohoo(1);
woohoo(2, 3);
}
static void woohoo(int required, Integer... optional) {
Integer lala;
if (optional.length == 1) {
lala = optional[0];
} else {
lala = 2;
}
System.out.println(required + lala);
}
}
Также важно отметить использование Integer
над int
. Integer
является оболочкой вокруг примитива int
, что позволяет при необходимости делать сравнения с null
.
Ответ 5
Зачем вы хотите это сделать?
Однако вы можете сделать это:
public void foo(int param1)
{
int param2 = 2;
// rest of code
}
или
public void foo(int param1, int param2)
{
// rest of code
}
public void foo(int param1)
{
foo(param1, 2);
}
Ответ 6
У вас не может быть необязательных аргументов, которые по умолчанию используют определенное значение в Java.
Самое близкое к тому, что вы говорите, это java varargs, посредством чего вы можете передать произвольное количество аргументов (одного типа) методу.