2009-03-04 7 views
10

Ho quattro variabili e voglio verificare se qualcuna di esse è nulla. Posso fareEsiste una funzione di controllo nullo vararg in Java o Apache Commons?

if (null == a || null == b || null == c || null == d) { 
    ... 
} 

ma quello che voglio veramente è

if (anyNull(a, b, c, d)) { 
    ... 
} 

ma io non voglio scrivere io stesso. Questa funzione esiste in una libreria Java comune? Ho controllato Commons Lang e non l'ho visto. Dovrebbe usare vararg per prendere qualsiasi numero di argomenti.

risposta

10

Il meglio che puoi fare con la libreria Java è, credo:

if (asList(a, b, c, d).contains(null)) { 
+1

Con un'importazione statica di java.util.Arrays.asList, presumo? –

+0

Sì. Devi importarlo in qualche modo. Anche se è un po 'un cheat ... –

+0

vicino alla programmazione alfabetica – OscarRyz

18

Non so se è in comuni, ma ci vuole circa dieci secondi per scrivere:

public static boolean anyNull(Object... objs) { 
    for (Object obj : objs) 
     if (obj == null) 
      return true; 
    return false; 
} 
+0

Sì, lo so, ma poi la domanda è dove per dirla. ;) –

+1

Hai una classe di utilità di qualche tipo? Sembra che finisca sempre con uno. –

+0

Sì, è Commons Lang, Commons IO, Collezioni Commons, ecc ... –

4

Hai chiesto nei commenti dove mettere l'helper statica, vi suggerisco

public class All { 
    public static final boolean notNull(Object... all) { ... } 
} 

e quindi usare il nome qualificato per la chiamata, suc h come

assert All.notNull(a, b, c, d); 

Lo stesso può essere fatto con una classe Any e metodi come isNull.

+0

Mi piace molto questa idea. –

1

In Java 8 è possibile farlo in modo ancora più elegante:

if (Stream.of(a, b, c, d).anyMatch(Objects::isNull)) { ... } 

o è possibile estrarre a un metodo:

public static boolean anyNull(Object... objects) { 
    return Stream.of(objects).anyMatch(Objects::isNull); 
} 

e poi utilizzarlo nel codice come questo:

if (anyNull(a, b, c, d)) { ... } 
Problemi correlati