方法中的java可选参数

时间:2012-02-22 17:41:39

标签: java arrays methods parameters null

我想创建一个需要1个必需参数和1个可选参数的方法,但是我找到了如何通过在参数(int ... b)中创建一个可选数组,但这是一个数组,我想要让它只是这个值为null或用户输入它,我可以通过制作2个同名的方法,但一个用单个参数和一个用2个参数,但可以用一个方法完成?

由于

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

您正在寻找的是默认参数支持。 Java没有这种能力,但它或多或少地模拟了这种能力。

一种简单的方法是使用方法重载。

另一种方法是直接识别特殊情况,然后替换默认值。

以下是 Ivo Limmen 混合这两种方法的示例:

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

我发现一个非常有趣的方法是使用Design Builder模式。有一个例子here

还有一个有趣的讨论here

答案 2 :(得分:1)

不,这正是

的重载方法

答案 3 :(得分:1)

Java方法中的参数没有“默认”值。使用varargs或方法重载。

答案 4 :(得分: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.
}

您的代码的客户端可以调用其中一个。对他们而言,似乎第二个参数是可选的。