web-dev-qa-db-fra.com

Java.util.List.isEmpty () vérifie-t-il si la liste elle-même est nulle?

Est-ce que Java.util.List.isEmpty() vérifie si la liste elle-même est null ou est-ce que je dois le faire moi-même?

Par exemple:

List<String> test = null;

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

Est-ce que cela jettera un NullPointerException parce que le test est null?

95
K''

Vous essayez d'appeler la méthode isEmpty() sur une référence null (sous la forme List test = null;). Cela jettera sûrement un NullPointerException. Vous devriez faire if(test!=null) à la place (en vérifiant d'abord null).

La méthode isEmpty() renvoie true si un objet ArrayList ne contient aucun élément; false sinon (pour que la List doive d'abord être instanciée, c'est-à-dire que vous êtes null).

Modifier:

Vous voudrez peut-être voir this question.

108
Lion

Je recommanderais d'utiliser Apache Commons Collections

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

qui l'implémente assez bien et bien documenté:

/**
 * 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());
}
99
cschaefer

Ceci volonté lance une NullPointerException - comme toute tentative d'invocation d'une méthode d'instance sur une référence null - mais dans les cas comme celui-ci, vous devez effectuer une vérification explicite par rapport à null:

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

C'est beaucoup mieux et plus clair que de propager une Exception.

15
pb2q

NonJava.util.List.isEmpty()not vérifier si une liste est null.

Si vous utilisez le framework Spring, vous pouvez utiliser la classe CollectionUtils pour vérifier si une liste est vide ou non. Il prend également en charge les références null. Voici l'extrait de code de la classe CollectionUtils du cadre Spring.

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

Même si vous n'utilisez pas Spring, vous pouvez continuer et modifier ce code pour ajouter votre classe AppUtil.

8
Abdullah Khan

L'appel d'une méthode sur une référence null entraînera toujours une exception. Testez si l'objet est d'abord nul:

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

Sinon, écrivez une méthode pour encapsuler cette logique:

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

Ensuite, vous pouvez faire:

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

Oui, ça va lancer une exception. Peut-être que vous êtes habitué à PHP code, où empty($element) vérifie également isset($element)? En Java, ce n'est pas le cas.

Vous pouvez le mémoriser facilement car la méthode est directement appelée dans la liste (la méthode appartient à la liste). Donc, s'il n'y a pas de liste, alors il n'y a pas de méthode. Et Java se plaindra de l'absence de liste sur laquelle appeler cette méthode.

3
Aufziehvogel

En plus de la réponse de Lion, je peux dire que vous feriez mieux d'utiliser if(CollectionUtils.isNotEmpty(test)){...} Ceci vérifie également la valeur null, aucune vérification manuelle n'est donc nécessaire.

3
lxknvlk

Vous pouvez également utiliser votre propre méthode isEmpty (pour plusieurs collections). Ajoutez ceci à votre classe Util.

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