我想创建一个需要1个必需参数和1个可选参数的方法,但是我找到了如何通过在参数(int ... b)中创建一个可选数组,但这是一个数组,我想要让它只是这个值为null或用户输入它,我可以通过制作2个同名的方法,但一个用单个参数和一个用2个参数,但可以用一个方法完成?
由于
答案 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.
}
您的代码的客户端可以调用其中一个。对他们而言,似乎第二个参数是可选的。