2

我有一個方法,我想在不同的場合使用。這意味着,我要使用的方法,但每次傳遞不同數量的參數:如何避免創建大量重載方法?

考慮這個例子:

public checkInput(Object a, Object b, Object c, Object d) { 
    a.someMethod(); 
    b.someMethod(); 
    c.someMethod(); 
    d.someMethod(); 
} 

現在,當我通過在4個參數我只能用這種方法checkInput(...)。但是,有些情況下我只能傳遞兩個參數。

如果我想調用像這樣的方法checkInput(a, b, null, null);我會得到一個NullPointerException

所以現在我想知道,我將不得不使用在這種情況下,過載,這意味着我將不得不創建

public checkInput(Object a) { 
    a.someMethod(); 
} 

public checkInput(Object a, Object b) { 
    a.someMethod(); 
    b.someMethod(); 
} 

...等等。

回答

9

您可以定義Variable arity method

public checkInput(Object... args) { 
    // args is nothing but an array. 
    // You can access each argument using indices args[0], args[1], ... 
} 

現在,你可以調用使用任意數量的參數此方法:

checkInput(obj); 
checkInput(obj1, obj2); 

使用可變參數類似於使用數組作爲參數。但它爲您提供了傳遞參數的靈活性,而無需創建數組。

但要小心,因爲var-args的類型是Object,它將採用任何類型的參數。在使用它們之前,你應該做適當的檢查。 另外,您的方法中只能有一個可變參數,並且該參數也應該在參數列表中最後一個。

+0

我真的不明白你的答案。你能否多描述一下? – user2426316

+0

我不知道這個'公共checkInput(Object ... args)'行應該做什麼。你能把它變成真正的Java嗎? – user2426316

+0

@ user2426316。這是真正的Java。請點擊我答案中的鏈接。此外,搜索可變參數,你會得到一些有用的鏈接相關的這個概念。 –

0

號只需重新使用四個PARAM方法

public checkInput(Object a) { 
    checkInput(a, null, null, null); 
} 

public checkInput(Object a, Object b) { 
    checkInput(a, b, null, null); 
} 
+0

如果我用'null'提供'checkInput(...)'方法,我會得到一個nullpointerexception。 – user2426316

+0

它是一種更好的方法嗎?在這種情況下使用變量參數會更有意義嗎? –

+0

@Ankur,我是否聲稱它是?是的,var-args無疑是更好的方法。然而,這也將在Java 5之前的版本中起作用。 –