这个问题已经有了最佳答案,请迅速访问这里。
可配置duplicate :
Java可选参数
在PHP中,我们知道在调用参数较少的函数时,要如下声明函数:
功能foo (int param 1,int param2='2' );
现在可以调用foo(2)将param2设置为2。
试图在Java构造函数中执行此操作,但似乎不可能。 有实现这个的方法吗? 还是只声明两个构造函数?
谢谢你!
我不熟悉PHP,为什么不在方法中声明param2?
这表示param2是一个可选参数,提供给定的值,否则提供值“2”
Java没有对构造函数或方法具有默认值的可选参数的概念。 你基本上处于过载状态。 但是,构造函数很容易链接,所以不需要重复代码。
公共foo (int param 1,int param2) )。
{
this.param1=param1;
this.param2=param2;
}
公共foo (int param1) )。
{
this (param 1,2 );
}
Java不支持默认参数。 要执行所需的操作,需要两个构造函数。
如果可能的默认值很多,则可以使用Builder模式使用setter的辅助对象。
例如
公共类foo {
私密金融字符串param 1;
私密金融字符串param 2;
私密foo (builder builder ) {
this.param1=builder.param1;
this.param2=builder.param2;
}
公共静态类构建器{
私有参数1=' defaultforparam1';
私有参数2=' defaultforparam2';
publicbuilderparam1(string param1) {
this.param1=param1;
返回时间;
}
publicbuilderparam2(string param1) {
this.param2=param2;
返回时间;
}
public Foo build () {
返回新福克斯(this;
}
}
}
这个可以让你说:
Foo myFoo=new Foo.Builder ().param1) ' myvalue ).build );
param2的默认值被设置。
虽然可以使用varargs进行模拟,但必须检查参数是否过多。
公共语音foo (int param 1,int . param2) )。
{
int param2_
(if(param2.length==0) ) ) ) ) ) ) ) )。
param2_=2
ELSEif(Para2.Length==1) ) ) ) ) ) ) )。
param2_=param2[0]
else
thrownewtoomanyargumentsexception (; //user提供的too many arguments,
//rest of the code
}
但是,这种方法不是一个好方法,所以建议使用重载。
可以将varargs用作可选参数。
公共类booyah
publicstaticvoidmain (字符串[ ] args ) {
woohoo(1;
woohoo (2,3 );
}
staticvoidwoohoo (要求输入,Integer. optional )。
Integer蓝色杯子;
if(optional.length==1) {
蓝色水杯=可选[0];
} else {
蓝色杯子=2;
}
system.out.println (请求的蓝色杯子);
}
}
另外,注意在int中使用Integer很重要。 Integer是原语int的包装,如果需要,可以将其与null进行比较。
在Java中,默认情况下设置为特定值的可选参数不可用。
最接近你说的是java varargs,它可以将任意数量的参数(同一类型)传递给方法。
你为什么要那样做?
但是,您可以:
公共语音(Int param1) )。
{
int param2=2;
//rest of code
}
或:
公共语音foo (int param 1,int param2) )。
{
//rest of code
}
公共语音(Int param1) )。
{
foo (param 1,2 );
}