2012-02-22 91 views
3

我想創建一個需要1個必需參數和1個可選參數的方法,但是我發現如何通過在參數(int ... b)中創建一個可選數組,但這是對於一個數組,我想讓它只是這個值爲空或用戶輸入它,我可以通過製作2個同名的方法,但其中一個使用單個參數,另一個使用2個參數,但它可以是隻用一種方法完成?方法中的java可選參數

謝謝

+0

你有很多很好的答案在這裏,你能標出答案之一是接受呢?這有助於改善SO社區。謝謝! – 2012-08-13 14:38:36

回答

7

不,Java不支持可選參數。重載的另一種替代方法(對兩個參數沒有太大意義,但確實對有意義)是使用表示所有參數的構建器類型 - 您可以爲構建器提供包含所需參數的構造器,然後爲每個可選項設置一個setter,使setter返回構建器本身。所以調用該方法變得像:

foo.doSomething(new ParameterBuilder(10).setBar(2).setBaz(10)); 
+0

感謝喬恩,我想使用可選參數的一個類的幫手方法即時編寫不寫給構造函數,但它是如你所說,重載似乎是最好的選擇 謝謝 – 2012-02-22 17:50:15

+0

@ aizen92:我不是建議這樣做*在*構造函數中 - 我所說的構造函數將用於ParameterBuilder類型,這將是用於收集這些參數的新類型。在這種情況下它是過度的,但在其他地方可能是一種有用的模式。 – 2012-02-22 17:55:33

1

沒有,這是什麼方法重載是

+2

我不會說它的「確切」是什麼重載,否則具有可選參數的語言不會超載。這是超載的一種可能。 – 2012-02-22 17:50:09

1

有在Java的方法參數沒有「默認」值。使用可變參數或方法重載。

+0

感謝Binyamin的幫助,看起來超載是最好的 – 2012-02-22 17:50:44

0

在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. 
} 

你的代碼的客戶端可以調用任何一個。對他們來說,看起來好像第二個參數是可選的。

3

您正在尋找的是默認參數支持。 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