我想创建一个需要1个必需参数和1个可选参数的方法,但是我发现如何通过在参数(int ... b)中创建一个可选数组,但这是对于一个数组,我想让它只是这个值为空或用户输入它,我可以通过制作2个同名的方法,但其中一个使用单个参数,另一个使用2个参数,但它可以是只用一种方法完成?方法中的java可选参数
谢谢
我想创建一个需要1个必需参数和1个可选参数的方法,但是我发现如何通过在参数(int ... b)中创建一个可选数组,但这是对于一个数组,我想让它只是这个值为空或用户输入它,我可以通过制作2个同名的方法,但其中一个使用单个参数,另一个使用2个参数,但它可以是只用一种方法完成?方法中的java可选参数
谢谢
不,Java不支持可选参数。重载的另一种替代方法(对两个参数没有太大意义,但确实对有意义)是使用表示所有参数的构建器类型 - 您可以为构建器提供包含所需参数的构造器,然后为每个可选项设置一个setter,使setter返回构建器本身。所以调用该方法变得像:
foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10));
感谢乔恩,我想使用可选参数的一个类的帮手方法即时编写不写给构造函数,但它是如你所说,重载似乎是最好的选择 谢谢 – 2012-02-22 17:50:15
@ aizen92:我不是建议这样做*在*构造函数中 - 我所说的构造函数将用于ParameterBuilder类型,这将是用于收集这些参数的新类型。在这种情况下它是过度的,但在其他地方可能是一种有用的模式。 – 2012-02-22 17:55:33
没有,这是什么方法重载是
我不会说它的“确切”是什么重载,否则具有可选参数的语言不会超载。这是超载的一种可能。 – 2012-02-22 17:50:09
有在Java的方法参数没有“默认”值。使用可变参数或方法重载。
感谢Binyamin的帮助,看起来超载是最好的 – 2012-02-22 17:50:44
在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.
}
你的代码的客户端可以调用任何一个。对他们来说,看起来好像第二个参数是可选的。
您正在寻找的是默认参数支持。 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 {
...
}
}
一个非常有趣的方法,我发现是使用的设计建造者模式。有一个例子here
还有一个有趣的讨论here
你有很多很好的答案在这里,你能标出答案之一是接受呢?这有助于改善SO社区。谢谢! – 2012-08-13 14:38:36