2013-02-15 7 views
17

Czy istnieje sposób podobny do tego w JDK lub Google guawaCzy istnieje JDK lub guawa sposób, aby włączyć null do pustej listy

public static <T> Collection<T> safe(Collection<T> collection) { 
    if (collection == null) { 
     return new ArrayList<>(0); 
    } else { 
     return collection; 
    } 
} 

co sprawia, że ​​łatwo nie upaść na rozszerzonym pętli jeśli coś zwróci pustą listę, na przykład:

for (String string : CollectionUtils.safe(foo.canReturnANullListOfStrings())) { 
    // do something 
} 

nie zawiesza się.

Rozejrzałem się, ale nie mogłem znaleźć żadnej takiej metody, i zastanawiam się, czy ją przeoczyłem, czy jest jakiś powód, dla którego taka poręczna metoda nie jest przydatna, a zatem nie jest uwzględniona?

+2

Metody nie powinny zwracać kolekcji 'null' w pierwszej kolejności. – SLaks

+1

Wierzę, że taką metodę można łatwo napisać przy użyciu 'Collections.emptyList()'. –

+1

@SLaks zgodził się w zasadzie, ale nie możesz kontrolować kodu innych ludzi :) – ams

Odpowiedz

20
Objects.firstNonNull(list, ImmutableList.<Foo>of()); 

Nie ma potrzeby wyspecjalizowanej metody, a to is indeed rozwiązanie zalecamy użyć natychmiast, gdy pojawi się potencjalnie null kolekcję z niegrzecznej API, które idealnie nie powinien zrobić w pierwszej kolejności.

1

Tak więc nie istnieje funkcja tego rodzaju wiedzy. Jednak pisanie jednego jest banalne, jak pokazałeś powyżej. Rozumowanie, dlaczego nie zostało uwzględnione, jest spowodowane tym, że null ma określone znaczenie i może nie być właściwe zwrócenie pustego Collection, gdy ktoś zostanie przekazany. Ogólnie (w moim odczuciu), gdy wartość pusta wchodzi do systemu, coś nieudane wyżej w łańcuchu lub niewłaściwa wartość nie została odpowiednio odkażona.

2

W Javie 8 możliwe jest, aby korzystać z tego:

Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList()); 
Powiązane problemy