2012-02-22 47 views
3

我想创建一个需要1个必需参数和1个可选参数的方法,但是我发现如何通过在参数(int ... b)中创建一个可选数组,但这是对于一个数组,我想让它只是这个值为空或用户输入它,我可以通过制作2个同名的方法,但其中一个使用单个参数,另一个使用2个参数,但它可以是只用一种方法完成?方法中的java可选参数

谢谢

+0

你有很多很好的答案在这里,你能标出答案之一是接受呢?这有助于改善SO社区。谢谢! – 2012-08-13 14:38:36

回答

7

不,Java不支持可选参数。重载的另一种替代方法(对两个参数没有太大意义,但确实对有意义)是使用表示所有参数的构建器类型 - 您可以为构建器提供包含所需参数的构造器,然后为每个可选项设置一个setter,使setter返回构建器本身。所以调用该方法变得像:

foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10)); 
+0

感谢乔恩,我想使用可选参数的一个类的帮手方法即时编写不写给构造函数,但它是如你所说,重载似乎是最好的选择 谢谢 – 2012-02-22 17:50:15

+0

@ aizen92:我不是建议这样做*在*构造函数中 - 我所说的构造函数将用于ParameterBuilder类型,这将是用于收集这些参数的新类型。在这种情况下它是过度的,但在其他地方可能是一种有用的模式。 – 2012-02-22 17:55:33

1

没有,这是什么方法重载是

+2

我不会说它的“确切”是什么重载,否则具有可选参数的语言不会超载。这是超载的一种可能。 – 2012-02-22 17:50:09

1

有在Java的方法参数没有“默认”值。使用可变参数或方法重载。

+0

感谢Binyamin的帮助,看起来超载是最好的 – 2012-02-22 17:50:44

0

在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. 
} 

你的代码的客户端可以调用任何一个。对他们来说,看起来好像第二个参数是可选的。

3

您正在寻找的是默认参数支持。 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