java+构造函数默认参数_带有可选参数的Java构造函数/方法?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Java optional parameters

我知道在PHP中,如果要调用参数较少的函数,则声明函数如下:

function foo(int param1, int param2 ="2");

现在我可以调用foo(2)并将param2设置为2。

我尝试在Java构造函数中执行此操作,但似乎不可能。 有没有办法做到这一点,或者我只需要声明两个构造函数?

谢谢!

我不熟悉PHP,但为什么不在方法中声明param2?

这表明它是一个可选参数,如果你指定param2它会得到你给的值,否则它得到值"2"

Java没有构造函数或方法中具有默认值的可选参数的概念。你基本上处于超负荷状态。但是,您可以轻松地链接构造函数,因此您无需重复代码:

public Foo(int param1, int param2)

{

this.param1 = param1;

this.param2 = param2;

}

public Foo(int param1)

{

this(param1, 2);

}

Java不支持默认参数。您需要有两个构造函数来执行您想要的操作。

如果有许多可能的默认值,则可以使用Builder模式,从而使用带有setter的辅助对象。

例如

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的默认值。

你可以使用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

}

但是这种方法不是一种好方法,因此最好使用重载。

您可以使用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进行比较。

您不能在Java中使用默认为特定值的可选参数。

最接近你所说的是java varargs,你可以将任意数量的参数(相同类型)传递给方法。

你为什么要那样做?

但是,您可以这样做:

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值