2013-07-24 18 views
12

Oto mój scenariusz:Java: Wysyłanie wielu parametrów do metody

Muszę zadzwonić do metody. Niech parametry będą następujące: Parametr 1, Parametr2, .., .., Parametr N Ale parametry, które mają zostać wysłane do metody, mogą się zmieniać w każdym przypadku.

Przypadek 1: Tylko Parametr1 jest wysyłany

Przypadek 2: kombinacja parametrów jest wysyłany

Przypadek 3: Wszystkie parametry są wysyłane

Co jest najlepszym sposobem osiągnąć to w Javie?

Odpowiedz

23

Rozwiązanie zależy TH e odpowiedź na pytanie - czy wszystkie parametry będą tego samego typu, a jeśli tak, czy każdy z nich będzie traktowany tak samo?

Jeśli parametry nie są tego samego typu lub co ważniejsze, nie będą traktowane tak samo należy użyć metody przeciążenia:

public class MyClass 
{ 
    public void doSomething(int i) 
    { 
    ... 
    } 

    public void doSomething(int i, String s) 
    { 
    ... 
    } 

    public void doSomething(int i, String s, boolean b) 
    { 
    ... 
    } 
} 

Jeśli jednak każdy parametr jest tego samego typu i będą traktowane w ten sam sposób, to możesz użyć zmiennej args wyposażone w Javie:

public MyClass 
{ 
    public void doSomething(int... integers) 
    { 
    for (int i : integers) 
    { 
     ... 
    } 
    } 
} 

Oczywiście przy użyciu zmiennej args można uzyskać dostęp do każdego arg przez jego indeksem, ale radziłbym przed tym, jak w większości przypadków wskazuje na problem w twój projekt. Podobnie, jeśli znajdziesz się przy sprawdzaniu typów podczas iteracji argumentów, Twój projekt wymaga recenzji.

+0

Wszystkie parametry nie są tego samego typu i nie znamy liczby parametrów, które będą przekazywane. –

+1

Powinienem być bardziej przejrzysty - czy wszystkie parametry mogą być traktowane jako ten sam super typ, bez potrzeby sprawdzania typu? Kontrola typu nie jest końcem świata, ale w większości przypadków jest to zapach kodu imho. –

+0

Wszystkie parametry nie są tego samego typu i nie znamy liczby parametrów, które będą przekazywane. Przykład: metoda (String a1, String a2, String b1, String b2, .., .. i niektóre wspólne int, Parametry String) gdzie a1 i a2 to jeden zestaw, b1 i b2 inny zestaw i tak dalej. Ale nie wiemy, ile zestawów musi minąć. –

9

Załóżmy, że masz pustą metodę, która drukuje wiele obiektów;

public static void print(Object... values){ 
    for(Object c : values){ 
     System.out.println(c); 
    } 
} 

powyższym przykładzie użyłem vararge jako argument, który przyjmuje wartości od 0 do N.

Z opinii: co jeśli 2 i 5 ciągów liczb całkowitych ??

Odpowiedź:

print("string1","string2",1,2,3,4,5); 
+0

Co jeśli 2 ciągi i 5 liczb całkowitych? –

+0

Zamiast nazywać je "String", wystarczy je nazwać 'Object's. – jrad

+0

@sureshatta: Jack już odpowiedział. Ustaw jako typ obiektu jako typ obiektu – Azad

Powiązane problemy