2014-03-06 45 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]) 
{ 

}