2014-03-06 52 views
3

我想在我的方法中有可选参数。我发现了布尔...测试,它的工作原理。但是每当我尝试使用第二个时,它都不起作用。有多个可选参数

有没有把两个或两个以上的可能性(同类型例如:2选项布尔)

代码: 我现在拥有的一切:

public void addJButton(boolean... yo){} 

我想要什么:

public void addJButton(boolean... yo, boolean... yo2){} 
+1

代码相关的地方在哪里? –

+0

是的,你可以放两个布尔值。 :-) – Leo

+0

你的意思是变量参数(http://docs.oracle.com/javase/7/docs/technotes/guides/language/varargs.html)? –

回答

5

至于可变参数符号(boolean...):可变参数参数总是必须是最后一个参数,所以您只能使用其中的一个参数。

您可以考虑通过null被省略参数,或者你可以尝试某种方法超载像Bathseba建议。

当去了,你必须记住,有没有名为paramters超负荷,所以只有poosition和类型可以定义参数传递和省略!

6

Java不支持函数中的可选参数。

相反,提供超载像这样的功能:

void myFunction(boolean parameter) 
{ 
    /*ToDo - code here*/  
} 

void myFunction() 
{ 
    myFunction(true/*i.e. call the overload with a default to true*/); 
} 

,当然,不止一个参数可以以这种方式被默认,你可以有多个重载,以支持不同的默认方案。

+2

var-args通常被认为是可选参数,因此Java **不会* *支持他们。但是它们仅限于每个方法的一个var-arg参数,并且它们必须是最后一个参数。 –

2

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

+2

这需要重新说明Java确实支持var-args形式的可选参数,但每个方法只能有1个var-arg参数,并且它必须是参数列表中的最后一个参数。 –

1

这是一个有点晚了答案,但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最终会被解释为数组。

2

处理多个或可选的参数

// 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(); 
0

如果你想有多个可选参数

public void initDatePickers(final EditText et,boolean... disableFuturedates) 
{...} 

然后你可以访问像这样的数组的值,

if(disableFuturedates[0]) 
{ 

}