2015-12-31 10 views
14

Mam dwie metody - o nazwach one i two. Metoda one pobiera List<Person> gdzie person to klasa i metoda, która pobiera poszczególne obiekty klasy .Podaj listę obiektów jako poszczególnych parametrów

Jak mogę przekazać List<Person> jako parametry pojedynczego obiektu do metody two? Model List może zawierać 0 lub 1 lub więcej elementów i chcę przekazać null, jeśli lista nie zawiera wszystkich 3 par wymaganych przez metodę two.

def one (List<Person> persons) { 

    // check the size of the list 
    // pass arguments to method two 

    // this works 
    two(persons[0], persons[1], persons[2]) 

    //what I want is 
    two(persons.each { it + ', '}) 
} 

def two (Person firstPerson, Person secondPerson, Person thirdPerson) { 

    // do something with the persons 
} 
+0

Chciałbym unikać aktywowanych nazwy parametrów tj 'osób zamiast "Osoby". Kapitały czasami powodują smutek, ponieważ groovy może czasami domyślać się, że jesteś na temat klasy –

+0

To była refaktoryzacja błędu przy zmianie mojej poprawnej nazwy klasy na przykład. Nie robię tego w moim codziennym programowaniu. Poddałem edycji pytanie Nice: –

Odpowiedz

8

Można użyć operatora spread * dla metody wywołującej, ale na podstawie Twojego komentarza „Lista może zawierać 0 lub 1 lub więcej elementów” będzie chciał użyć funkcja variadic dla twojej drugiej metody. Spróbuj tego:

// Spread operator "*" 
def one(List<Person> persons) { 
    two(*persons) 
} 

// Variadic function "..." 
def two(Person... values) { 
    values.each { person -> 
    println person 
    } 
} 

Teraz można wywołać mijania NULL dwie metody, pustą listę, lub dowolną liczbę wystąpień osób takich jak:

two(null) 
two([]) 
two(person1, person2, person3, person4, person5) 
11

Zastosowanie:

two(*persons) 

* podzieli listę i przekazać jego elementy odsunięte.

To będzie:

def one (List<String> strings) { 
    two(strings[0], strings[1], strings[2]) 
    two(*strings) 
} 

def two (String firstPerson = null, String secondPerson = null, String thirdPerson = null) { 
    println firstPerson 
    println secondPerson 
    println thirdPerson 
} 

one(['a','b','c']) 
+2

Jest prawie w porządku, ale co, jeśli istnieją tylko dwa argumenty? jeden (["a", "b"]). biniam chce mieć zero jako brakujące. Na szczęście istnieją argumenty domyślne w Groovy, więc kompletne rozwiązanie będzie dwa (String firstPerson = null, String secondPerson = null, String thirdPerson = null) –

+0

@JakubDyszkiewicz, możesz edytować odpowiedź. – Opal

Powiązane problemy