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
?
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.
Je recommanderais d'utiliser Apache Commons Collections
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());
}
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
.
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
.
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)) {
// ...
}
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.
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.
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;
}