2012-12-12 6 views
7

Qual è il modo migliore per eseguire la protezione da zero contains su una raccolta Java?La raccolta null-safe contiene il metodo

in altre parole -

if (collection != null && collection.contains(x)) 

?

speravo Apache Commons-collezioni hanno avuto qualcosa di simile CollectionUtils.contains(collection, x) che avrebbe semplicemente restituire false se la raccolta è stato nullo, in quanto non v'è con size(), che tratta nulla come un insieme vuoto.

Tuttavia, sembra che non ci sia nulla di simile - mi è mancato?

+5

Qual è il problema con 'collection! = Null && collection.contains (x)'? Semplice e nessuna dipendenza esterna! –

+1

@AbhinavSarkar: questo è quello che stavo pensando! – Cratylus

+0

Ecco un post in qualche modo correlato, da parte di qualcuno che non ha voluto gestire il controllo per null tutto il tempo: http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java – RonaldBarzell

risposta

10

Si dovrebbe invece applicare il modello di oggetto nullo qui e utilizzare una raccolta vuota, anziché una raccolta nullo. Certo, forse questo è appropriato per il tuo problema, ma senza più contesto è difficile da dire. In altre parole, penso che tu stia risolvendo il problema sbagliato: perché collection potrebbe essere nullo in primo luogo?

+3

+1. La soluzione corretta è _non utilizzare collezioni null. –

+0

In generale sono d'accordo. Il problema specifico è che la raccolta proviene da 'session.getAttribute' e quindi potrebbe non essere mai stata impostata. Quindi almeno un controllo non nullo è inevitabile - ma se ci fossero più di questi controlli, sì, potrei semplicemente avere un singolo assegno e sostituirlo con una raccolta vuota. – wrschneider

+0

In tal caso, prendere in considerazione l'utilizzo facoltativo di Guava, forse? Il problema è che ti lascia ancora un controllo per Optional.isPresent(). Penso che sia fondamentalmente inevitabile. –