2013-02-15 11 views
17

Esiste un metodo come questo nel JDK o Google guavaEsiste un metodo JDK o guava per trasformare un valore nullo in una lista vuota

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

che lo rende facile per non bloccarsi in un loop migliorata se qualcosa restituisce un elenco nullo ad esempio

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

non si arresta in modo anomalo.

Mi sono guardato intorno ma non sono riuscito a trovare alcun metodo del genere, e mi chiedo se mi è mancato o se c'è un motivo per cui un metodo così pratico non è pratico e quindi non incluso?

+2

I metodi non devono restituire le raccolte 'null' in primo luogo. – SLaks

+1

Credo che un tale metodo possa essere facilmente scritto usando 'Collections.emptyList()'. –

+1

@SLaks concordato in linea di principio ma non è possibile controllare il codice di altri popoli :) – ams

risposta

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

Non c'è necessità di un metodo specializzato, e questo is indeed la soluzione si consiglia di utilizzare immediatamente ogni volta che si ottiene una collezione potenzialmente nullo da un API cattivo che idealmente non dovrebbe farlo in primo luogo.

1

Quindi non esiste una funzione per la mia conoscenza di questo tipo. Tuttavia scriverne uno è banale come hai mostrato sopra. Il ragionamento dietro il motivo per cui potrebbe non essere stato incluso è perché null ha un significato specifico e potrebbe non essere appropriato restituire uno Collection vuoto quando uno viene passato in giro. Generalmente (nella mia esperienza) quando un valore nullo entra nel sistema qualcosa non riesce più in alto sulla catena o un valore non valido non è stato correttamente disinfettato.

2

In Java 8 è possibile utilizzare questo:

Optional.ofNullable(foo.canReturnANullListOfStrings()).orElse(Collections.emptyList()); 
Problemi correlati