我想創建一個需要1個必需參數和1個可選參數的方法,但是我發現如何通過在參數(int ... b)中創建一個可選數組,但這是對於一個數組,我想讓它只是這個值爲空或用戶輸入它,我可以通過製作2個同名的方法,但其中一個使用單個參數,另一個使用2個參數,但它可以是隻用一種方法完成?方法中的java可選參數
謝謝
我想創建一個需要1個必需參數和1個可選參數的方法,但是我發現如何通過在參數(int ... b)中創建一個可選數組,但這是對於一個數組,我想讓它只是這個值爲空或用戶輸入它,我可以通過製作2個同名的方法,但其中一個使用單個參數,另一個使用2個參數,但它可以是隻用一種方法完成?方法中的java可選參數
謝謝
不,Java不支持可選參數。重載的另一種替代方法(對兩個參數沒有太大意義,但確實對有意義)是使用表示所有參數的構建器類型 - 您可以爲構建器提供包含所需參數的構造器,然後爲每個可選項設置一個setter,使setter返回構建器本身。所以調用該方法變得像:
foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10));
感謝喬恩,我想使用可選參數的一個類的幫手方法即時編寫不寫給構造函數,但它是如你所說,重載似乎是最好的選擇 謝謝 – 2012-02-22 17:50:15
@ aizen92:我不是建議這樣做*在*構造函數中 - 我所說的構造函數將用於ParameterBuilder類型,這將是用於收集這些參數的新類型。在這種情況下它是過度的,但在其他地方可能是一種有用的模式。 – 2012-02-22 17:55:33
沒有,這是什麼方法重載是
我不會說它的「確切」是什麼重載,否則具有可選參數的語言不會超載。這是超載的一種可能。 – 2012-02-22 17:50:09
有在Java的方法參數沒有「默認」值。使用可變參數或方法重載。
感謝Binyamin的幫助,看起來超載是最好的 – 2012-02-22 17:50:44
在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.
}
你的代碼的客戶端可以調用任何一個。對他們來說,看起來好像第二個參數是可選的。
您正在尋找的是默認參數支持。 Java沒有這種能力,但它或多或少地模擬了這種能力。
一個簡單的方法是使用方法重載。
另一種方法是直接識別特殊情況,然後替換默認值。
這是一個被伊沃·利門混合這兩個方法的一個例子:
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 {
...
}
}
一個非常有趣的方法,我發現是使用的設計建造者模式。有一個例子here
還有一個有趣的討論here
你有很多很好的答案在這裏,你能標出答案之一是接受呢?這有助於改善SO社區。謝謝! – 2012-08-13 14:38:36