2009-03-04 4 views
10

У меня есть четыре переменные, и я хочу проверить, нет ли одного из них. Я могу сделатьЕсть ли функция проверки переменных varargs в Java или Apache Commons?

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

но то, что я действительно хочу

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

, но я не хочу писать его сам. Эта функция существует в любой общей библиотеке Java? Я проверил Commons Lang и не видел этого. Он должен использовать varargs для принятия любого количества аргументов.

ответ

10

Лучшее, что вы можете сделать с помощью библиотеки Java, я думаю:

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

Со статическим импортом java.util.Arrays.asList, я полагаю? –

+0

Да. Вы должны импортировать его каким-то образом. Хотя это немного обман ... –

+0

близко к грамотному программированию – OscarRyz

18

Я не знаю, если это в достоянию, но это занимает около десяти секунд, чтобы написать:

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

Да, я знаю, но тогда вопрос в том, где сказать. ;) –

+1

Есть ли у вас класс утилит? Кажется, я всегда получаю один. –

+0

Да, это Commons Lang, Commons IO, Commons Collections и т. Д. –

4

Вы спросили в комментариях, где поставить статический помощник, я предлагаю

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

, а затем использовать квалифицированное имя для вызова, SUC ч, как

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

То же может быть сделано с классом Any и методы, как isNull.

+0

Мне очень нравится эта идея. –

1

В Java 8 вы можете сделать это в еще более изящным способом:

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

или вы можете извлечь его в метод:

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

, а затем использовать его в вашем коде как это:

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