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
?
Ответы
Ответ 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;
}