我想在我的方法中有可选参数。我发现了布尔...测试,它的工作原理。但是每当我尝试使用第二个时,它都不起作用。有多个可选参数
有没有把两个或两个以上的可能性(同类型例如:2选项布尔)
代码: 我现在拥有的一切:
public void addJButton(boolean... yo){}
我想要什么:
public void addJButton(boolean... yo, boolean... yo2){}
我想在我的方法中有可选参数。我发现了布尔...测试,它的工作原理。但是每当我尝试使用第二个时,它都不起作用。有多个可选参数
有没有把两个或两个以上的可能性(同类型例如:2选项布尔)
代码: 我现在拥有的一切:
public void addJButton(boolean... yo){}
我想要什么:
public void addJButton(boolean... yo, boolean... yo2){}
至于可变参数符号(boolean...
):可变参数参数总是必须是最后一个参数,所以您只能使用其中的一个参数。
您可以考虑通过null
被省略参数,或者你可以尝试某种方法超载像Bathseba建议。
当去了,你必须记住,有没有名为paramters超负荷,所以只有poosition和类型可以定义参数传递和省略!
Java不支持函数中的可选参数。
相反,提供超载像这样的功能:
void myFunction(boolean parameter)
{
/*ToDo - code here*/
}
void myFunction()
{
myFunction(true/*i.e. call the overload with a default to true*/);
}
,当然,不止一个参数可以以这种方式被默认,你可以有多个重载,以支持不同的默认方案。
var-args通常被认为是可选参数,因此Java **不会* *支持他们。但是它们仅限于每个方法的一个var-arg参数,并且它们必须是最后一个参数。 –
Java确实支持var-args形式的可选参数,但每个方法只能有1个var-arg参数,并且它必须是参数列表中的最后一个(Varargs)。
Java支持重载方法,和Java可以用不同的方法签名的方法之间进行区分。这意味着,一个类中的方法可以有相同的名字,如果他们有不同的参数列表:
public class DataArtist {
...
public void draw(boolean b1) {
...
}
public void draw(boolean b1, boolean b2) {
...
}
public void draw(double f) {
...
}
public void draw(int i, double f) {
...
}
}
更多信息上:Java Methods。
这需要重新说明Java确实支持var-args形式的可选参数,但每个方法只能有1个var-arg参数,并且它必须是参数列表中的最后一个参数。 –
这是一个有点晚了答案,但Java有VAR-ARGS而不是可选的参数和其他人所说的,你只能使用每个方法之一,而VAR-arg参数必须是最后的方法。
如果你需要的东西像这一点;
public void addJButton(boolean... yo, boolean... yo2){}
然后下列替代品可用。
public void addJButton(boolean yo1, boolean yo2, boolean... yo3){}
public void addJButton(boolean[] yo1, boolean[] yo2){}
第一选项意味着手动指定在一个重载的方法的布尔值的数量,并且所述第二选项采用布尔值的两个阵列。无论如何,你的var-args最终会被解释为数组。
处理多个或可选的参数
// Builder Pattern
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
public Builder calories(int val)
{ calories = val; return this; }
public Builder fat(int val)
{ fat = val; return this; }
public Builder carbohydrate(int val)
{ carbohydrate = val; return this; }
public Builder sodium(int val)
{ sodium = val; return this; }
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
增加值时,尝试建造者模式:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
calories(100).sodium(35).carbohydrate(27).build();
如果你想有多个可选参数
public void initDatePickers(final EditText et,boolean... disableFuturedates)
{...}
然后你可以访问像这样的数组的值,
if(disableFuturedates[0])
{
}
代码相关的地方在哪里? –
是的,你可以放两个布尔值。 :-) – Leo
你的意思是变量参数(http://docs.oracle.com/javase/7/docs/technotes/guides/language/varargs.html)? –