144 votes

Est-ce que java.util.List.isEmpty() vérifie si la liste elle-même est nulle ?

Fait java.util.List.isEmpty() vérifier si la liste elle-même est null ou dois-je faire cette vérification 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 ?

151voto

Lion Points 7328

Vous essayez d'appeler le isEmpty() sur un null référence (comme List test = null; ). Cela va certainement lancer un NullPointerException . Vous devez faire if(test!=null) à la place (vérification de null d'abord).

La méthode isEmpty() retourne vrai, si un ArrayList ne contient pas d'éléments ; false sinon (pour cela, l'objet List doit d'abord être instancié, ce qui dans votre cas est null ).

Vous voudrez peut-être voir cette question .

140voto

cschaefer Points 1405

Je recommande d'utiliser Apache Commons Collections :

https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isEmpty-java.util.Collection-

qui l'implémente très bien et est 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());
}

29voto

Abdullah Khan Points 5116

Non, java.util.List.isEmpty() ne vérifie pas si une liste est null .

Si vous utilisez le Printemps vous pouvez utiliser le CollectionUtils pour vérifier si une liste est vide ou non. Elle s'occupe également de la null références. Voici un extrait de code tiré de l'application Spring framework CollectionUtils classe.

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 l'ajouter dans votre système d'exploitation. AppUtil classe.

20voto

pb2q Points 28514

Este sera lancer un NullPointerException - comme le fera toute tentative d'invoquer une méthode d'instance sur une null mais dans des cas comme celui-ci, vous devez effectuer une vérification explicite de l'existence de la référence null :

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

C'est bien mieux, et plus clair, que de propager un message de type Exception .

10voto

cdhowie Points 62253

L'invocation d'une méthode sur une référence nulle entraînera toujours une exception. Testez d'abord si l'objet est 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();
}

Alors vous pouvez le faire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X