Подтвердить что ты не робот

Does java.util.List.isEmpty() проверить, является ли сам список нулевым?

Проверяет ли java.util.List.isEmpty(), действительно ли сам список null, или мне нужно это проверить?

Например:

List test = null;

if(!test.isEmpty()) {
    for(Object o : test) {
        // do stuff here            
    }
}

Будет ли это выбрано NullPointerException, потому что тест null?

4b9b3361

Ответ 1

Вы пытаетесь вызвать метод isEmpty() по ссылке null (как List test = null; ). Это, несомненно, вызовет NullPointerException. Вы должны сделать if(test!=null) вместо этого (сначала проверьте null).

Метод isEmpty() возвращает true, если объект ArrayList не содержит элементов; false в противном случае (для этого сначала должен быть экземпляр List, который в вашем случае равен null).

Edit:

Возможно, вы захотите увидеть этот вопрос.

Ответ 2

Я бы рекомендовал использовать коллекцию Apache Commons

http://commons.apache.org/proper/commons-collections/javadocs/api-release/org/apache/commons/collections4/CollectionUtils.html#isEmpty(java.util.Collection)

который реализует его вполне нормально и хорошо документирован:

/**
 * Null-safe check if the specified collection is empty.
 * <p>
 * Null returns true.
 * 
 * @param coll  the collection to check, may be null
 * @return true if empty or null
 * @since Commons Collections 3.2
 */
public static boolean isEmpty(Collection coll) {
    return (coll == null || coll.isEmpty());
}

Ответ 3

Этот будет выдавать NullPointerException - как и любая попытка вызвать метод экземпляра в ссылке null, но в подобных случаях вы должны сделать явную проверку против null:

if ((test != null) && !test.isEmpty())

Это намного лучше и яснее, чем распространение Exception.

Ответ 4

Вызов любого метода для любой нулевой ссылки всегда приведет к исключению. Проверьте, сначала ли объект null:

List<Object> test = null;
if (test != null && !test.isEmpty()) {
    // ...
}

В качестве альтернативы напишите метод для инкапсуляции этой логики:

public static <T> boolean IsNullOrEmpty(Collection<T> list) {
    return list == null || list.isEmpty();
}

Затем вы можете сделать:

List<Object> test = null;
if (!IsNullOrEmpty(test)) {
    // ...
}

Ответ 5

Да, он будет выбросить исключение. возможно, вы привыкли к PHP, где empty($element) также проверяет наличие isset($element)? В Java это не так.

Вы можете запомнить это легко, потому что метод непосредственно вызывается в списке (метод принадлежит списку). Поэтому, если нет списка, то метода нет. И Java будет жаловаться, что нет списка для вызова этого метода.

Ответ 6

Нет java.util.List.isEmpty() не проверяет, является ли список нулевым.

Если вы используете фреймворк Spring, вы можете использовать класс CollectionUtils, чтобы проверить, пуст ли пуст или нет. Он также заботится о ссылках null. Ниже приведен фрагмент кода из класса Spring framework CollectionUtils.

public static boolean isEmpty(Collection<?> collection) {
    return (collection == null || collection.isEmpty());
}

Даже если вы не используете Spring, вы можете продолжить и настроить этот код, чтобы добавить его в класс AppUtil.

Ответ 7

В дополнение к Lion ответ я могу сказать, что вам лучше использовать if(CollectionUtils.isNotEmpty(test)){...} Это также проверяет значение null, поэтому ручная проверка не требуется.

Ответ 8

Вы также можете использовать собственный метод isEmpty (для множественной коллекции). Добавьте этот класс Util.

public static boolean isEmpty(Collection... collections) {
    for (Collection collection : collections) {
        if (null == collection || collection.isEmpty())
            return true;
    }
    return false;
}