我想在我的方法中有可選參數。我發現了布爾...測試,它的工作原理。但是每當我嘗試使用第二個時,它都不起作用。有多個可選參數
有沒有把兩個或兩個以上的可能性(同類型例如: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)? –